]> source.dussan.org Git - archiva.git/blob
e024caefb0282ad4aec08510e9c87417188a6a3c
[archiva.git] /
1 package org.apache.archiva.repository.storage.mock;
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  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  */
20
21 import org.apache.archiva.repository.storage.RepositoryStorage;
22 import org.apache.archiva.repository.storage.StorageAsset;
23 import org.apache.archiva.repository.storage.util.VisitStatus;
24
25 import java.io.IOException;
26 import java.io.InputStream;
27 import java.io.OutputStream;
28 import java.net.URI;
29 import java.nio.channels.ReadableByteChannel;
30 import java.nio.channels.WritableByteChannel;
31 import java.nio.file.CopyOption;
32 import java.util.LinkedHashMap;
33 import java.util.Optional;
34 import java.util.function.Consumer;
35
36 /**
37  * @author Martin Stockhammer <martin_s@apache.org>
38  */
39 public class MockStorage implements RepositoryStorage
40 {
41     public static final String ADD = "ADD";
42     public static final String REMOVE = "REMOVE";
43     private MockAsset root;
44     private LinkedHashMap<String, MockAsset> assets = new LinkedHashMap<>( );
45
46     private VisitStatus status = new VisitStatus( );
47
48     public MockStorage( MockAsset root )
49     {
50         this.root = root;
51         root.setStorage( this );
52     }
53
54     public MockStorage() {
55         this.root = new MockAsset( "" );
56         this.root.setStorage( this );
57     }
58
59     public VisitStatus getStatus() {
60         return status;
61     }
62
63     @Override
64     public URI getLocation( )
65     {
66         return null;
67     }
68
69     @Override
70     public void updateLocation( URI newLocation ) throws IOException
71     {
72
73     }
74
75     private String[] splitPath(String path) {
76         if (path.equals("/")) {
77             return new String[0];
78         } else
79         {
80             if (path.startsWith( "/" )) {
81                 return path.substring( 1, path.length( ) ).split( "/" );
82             }
83             return path.split( "/" );
84         }
85     }
86
87     @Override
88     public StorageAsset getAsset( String path )
89     {
90         if (assets.containsKey( path )) {
91             return assets.get( path );
92         }
93         String[] pathArr = splitPath( path );
94         StorageAsset parent = root;
95         for (String pathElement : pathArr) {
96             Optional<? extends StorageAsset> next = parent.list( ).stream( ).filter( a -> a.getName( ).equals( pathElement ) ).findFirst( );
97             if (next.isPresent()) {
98                 parent = next.get( );
99             } else {
100                 MockAsset asset = new MockAsset( (MockAsset)parent, pathElement );
101                 assets.put( asset.getPath( ), asset );
102                 parent = asset;
103             }
104         }
105         return parent;
106     }
107
108     @Override
109     public StorageAsset getRoot( )
110     {
111         return root;
112     }
113
114     @Override
115     public void consumeData( StorageAsset asset, Consumer<InputStream> consumerFunction, boolean readLock ) throws IOException
116     {
117
118     }
119
120     @Override
121     public void consumeDataFromChannel( StorageAsset asset, Consumer<ReadableByteChannel> consumerFunction, boolean readLock ) throws IOException
122     {
123
124     }
125
126     @Override
127     public void writeData( StorageAsset asset, Consumer<OutputStream> consumerFunction, boolean writeLock ) throws IOException
128     {
129
130     }
131
132     @Override
133     public void writeDataToChannel( StorageAsset asset, Consumer<WritableByteChannel> consumerFunction, boolean writeLock ) throws IOException
134     {
135
136     }
137
138     @Override
139     public StorageAsset addAsset( String path, boolean container )
140     {
141         String[] pathArr = splitPath( path );
142         StorageAsset parent = root;
143         for (String pathElement : pathArr) {
144             Optional<? extends StorageAsset> next = parent.list( ).stream( ).filter( a -> a.getName( ).equals( pathElement ) ).findFirst( );
145             if (next.isPresent()) {
146                 parent = next.get( );
147             } else {
148                 MockAsset asset = new MockAsset( (MockAsset)parent, pathElement );
149                 assets.put( asset.getPath( ), asset );
150                 parent = asset;
151             }
152         }
153         status.add( ADD, parent );
154         return parent;
155     }
156
157     @Override
158     public void removeAsset( StorageAsset assetArg ) throws IOException
159     {
160         MockAsset asset = (MockAsset) assetArg;
161         if (asset.hasParent())
162         {
163             asset.getParent( ).unregisterChild( asset );
164         }
165         assets.remove( asset.getPath( ) );
166         status.add( REMOVE, asset );
167         if (asset.isThrowException()) {
168             throw new IOException( "Mocked IOException for " + asset.getPath( ) );
169         }
170     }
171
172     @Override
173     public StorageAsset moveAsset( StorageAsset origin, String destination, CopyOption... copyOptions ) throws IOException
174     {
175         return null;
176     }
177
178     @Override
179     public void moveAsset( StorageAsset origin, StorageAsset destination, CopyOption... copyOptions ) throws IOException
180     {
181
182     }
183
184     @Override
185     public StorageAsset copyAsset( StorageAsset origin, String destination, CopyOption... copyOptions ) throws IOException
186     {
187         return null;
188     }
189
190     @Override
191     public void copyAsset( StorageAsset origin, StorageAsset destination, CopyOption... copyOptions ) throws IOException
192     {
193
194     }
195 }