This project has retired. For details please refer to its Attic page.
RepositorySession xref
View Javadoc
1   package org.apache.archiva.metadata.repository;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   * http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import org.slf4j.Logger;
23  import org.slf4j.LoggerFactory;
24  
25  /**
26   * The repository session provides a single interface to accessing Archiva repositories. It provides access to three
27   * resources:
28   * <ul>
29   * <li>{@link MetadataRepository} - the metadata content repository for read/write access, in its current state (no
30   * remote resources will be retrieved in the process</li>
31   * <li>{@link MetadataResolver} - access to resolve metadata content, accommodating metadata not yet stored or up to
32   * date in the content repository (i.e. virtualised repositories, remote proxied content, or metadata in a different
33   * model format in the repository storage)</li>
34   * <li>{@link org.apache.archiva.metadata.repository.storage.RepositoryStorage} - access to the physical storage of a
35   * repository and the source artifacts and project models</li>
36   * </ul>
37   */
38  public class RepositorySession
39      implements AutoCloseable
40  {
41      private final MetadataRepository repository;
42  
43      private final MetadataResolver resolver;
44  
45      private boolean dirty;
46  
47      private Logger log = LoggerFactory.getLogger( getClass() );
48  
49      // FIXME: include storage here too - perhaps a factory based on repository ID, or one per type to retrieve and
50      //        operate on a given repo within the storage API
51  
52      public RepositorySession( MetadataRepository metadataRepository, MetadataResolver resolver )
53      {
54          this.repository = metadataRepository;
55          this.resolver = resolver;
56      }
57  
58      public MetadataRepository getRepository()
59      {
60          return repository;
61      }
62  
63      public MetadataResolver getResolver()
64      {
65          return resolver;
66      }
67  
68      protected boolean isDirty() {
69          return dirty;
70      }
71  
72      public void save() throws MetadataSessionException
73      {
74          this.dirty = false;
75      }
76  
77      public void revert() throws MetadataSessionException
78      {
79          this.dirty = false;
80      }
81  
82      /**
83       * Close the session. Required to be called for all open sessions to ensure resources are properly released.
84       * If the session has been marked as dirty, it will be saved. This may save partial changes in the case of a typical
85       * <code>try { ... } finally { ... }</code> approach - if this is a problem, ensure you revert changes when an
86       * exception occurs.
87       * <b>can throw RuntimeException</b>
88       */
89      @Override
90      public void close()
91      {
92          try
93          {
94              if ( isDirty() )
95              {
96                  save();
97              }
98          }
99          catch ( MetadataSessionException e )
100         {
101             throw new RuntimeException( "Could not save the session " + e.getMessage( ), e );
102         }
103     }
104 
105     /**
106      * ignore RuntimeException when closing repository
107      * @since 1.4-M4
108      */
109     public void closeQuietly()
110     {
111         try
112         {
113             this.close();
114         }
115         catch ( RuntimeException e )
116         {
117             log.warn( "ignore Runtime exception while closing: {}", e.getMessage(), e );
118         }
119     }
120 
121 
122     public void markDirty()
123     {
124         this.dirty = true;
125     }
126 
127     public void refresh() throws MetadataSessionException {
128 
129     }
130 
131     public void refreshAndDiscard() throws MetadataSessionException {
132 
133     }
134 }