]> source.dussan.org Git - archiva.git/blob
1f7fda93bc9eadbf29ec3efd36f1b801226fb65d
[archiva.git] /
1 package org.apache.archiva.common;
2 /*
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  * Unless required by applicable law or agreed to in writing,
13  * software distributed under the License is distributed on an
14  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15  * KIND, either express or implied.  See the License for the
16  * specific language governing permissions and limitations
17  * under the License.
18  */
19
20 /**
21  * Generic interface for mapping DTOs
22  *
23  * @author Martin Schreier <martin_s@apache.org>
24  */
25 public interface ModelMapper<S,T>
26 {
27     /**
28      * Converts the source instance to a new instance of the target type.
29      * @param source the source instance
30      * @return a new instance of the target type
31      */
32     T map(S source);
33
34     /**
35      * Updates the target instance based on the source instance
36      * @param source the source instance
37      * @param target the target instance
38      */
39     void update( S source, T target );
40
41
42     /**
43      * Converts the target instance back to the source type
44      * @param target the target instance
45      * @return a new instance of the source type
46      */
47     S reverseMap(T target);
48
49     /**
50      * Updates the source instance based on the target instance
51      * @param target the target instance
52      * @param source the source instance
53      */
54     void reverseUpdate( T target, S source);
55
56     /**
57      * Returns the class name of the source type
58      * @return the source type
59      */
60     Class<S> getSourceType();
61
62     /**
63      * Returns the class name of the target type
64      * @return the target type
65      */
66     Class<T> getTargetType();
67
68     /**
69      * Returns <code>true</code>, if the given type are the same or supertype of the mapping types.
70      * @param sourceType
71      * @param targetType
72      * @param <S>
73      * @param <T>
74      * @return
75      */
76     <S, T> boolean supports( Class<S> sourceType, Class<T> targetType );
77
78 }