Salome HOME
DTO is introduced for knowledge elements. BeanHelper is modified so that setters...
[tools/siman.git] / Workspace / Siman-Common / src / org / splat / util / DTOTransformer.java
1 /*****************************************************************************
2  * Company         OPEN CASCADE
3  * Application     SIMAN
4  * File            $Id$ 
5  * Creation date   05.10.2012
6  * @author         $Author$
7  * @version        $Revision$
8  *****************************************************************************/
9
10 package org.splat.util;
11
12 import java.util.Map;
13
14 import org.splat.log.AppLogger;
15
16 import net.sf.beanlib.PropertyInfo;
17 import net.sf.beanlib.spi.BeanTransformerSpi;
18 import net.sf.beanlib.spi.CustomBeanTransformerSpi;
19
20 /**
21  * DTO transformer used by BeanHelper.
22  * 
23  * @author <a href="mailto:roman.kozlov@opencascade.com">Roman Kozlov (RKV)</a>
24  */
25 public class DTOTransformer implements CustomBeanTransformerSpi {
26
27         /**
28          * The logger for the service.
29          */
30         public final static AppLogger logger = AppLogger
31                         .getLogger(DTOTransformer.class);
32
33         /**
34          * the bean transformer.
35          */
36         private final BeanTransformerSpi _beanTransformer;
37
38         /**
39          * Constructor.
40          * 
41          * @param beanTransformer
42          *            the bean transformer
43          */
44         public DTOTransformer(final BeanTransformerSpi beanTransformer) {
45                 _beanTransformer = beanTransformer;
46         }
47
48         /**
49          * 
50          * {@inheritDoc}
51          * 
52          * @see net.sf.beanlib.spi.CustomBeanTransformerSpi#isTransformable(java.lang.Object, java.lang.Class, net.sf.beanlib.PropertyInfo)
53          */
54         public <T> boolean isTransformable(final Object from,
55                         final Class<T> toClass, final net.sf.beanlib.PropertyInfo info) {
56                 boolean ok = false;
57                 if (from != null) {
58                         String fromName = from.getClass().getSimpleName();
59                         String toName = toClass.getSimpleName();
60                         if (logger.isDebugEnabled()) {
61                                 logger.debug("From: " + fromName + "; To: " + toName);
62                                 ok = (fromName.equals(toName + "DTO") || toName.equals(fromName
63                                                 + "DTO"));
64                         }
65                 } else {
66                         if (logger.isDebugEnabled()) {
67                                 logger.debug("From: null; To: " + toClass.getSimpleName());
68                         }
69                 }
70                 if (logger.isDebugEnabled()) {
71                         logger.debug("Can transform from " + info.getFromBean() + "."
72                                         + info.getPropertyName() + " to " + info.getToBean() + "."
73                                         + info.getPropertyName() + ": " + ok);
74                 }
75                 return ok;
76         }
77
78         /**
79          * 
80          * {@inheritDoc}
81          * 
82          * @see net.sf.beanlib.spi.Transformable#transform(java.lang.Object, java.lang.Class, net.sf.beanlib.PropertyInfo)
83          */
84         public <T> T transform(final Object in, final Class<T> toClass,
85                         final PropertyInfo info) {
86                 if (logger.isDebugEnabled()) {
87                         logger.debug("Transform " + in.getClass().getSimpleName() + ": "
88                                         + in.toString() + " to " + toClass.getSimpleName());
89                 }
90                 Map<Object, Object> cloneMap = _beanTransformer.getClonedMap();
91                 Object clone = cloneMap.get(in);
92
93                 if (clone != null) {
94                         return (T) clone;
95                 }
96
97                 if (logger.isDebugEnabled()) {
98                         logger.debug("Copy bean from " + info.getFromBean() + "."
99                                         + info.getPropertyName() + " to " + info.getToBean() + "."
100                                         + info.getPropertyName());
101                 }
102                 clone = BeanHelper.copyBean(in, toClass);
103                 cloneMap.put(in, clone);
104
105                 return (T) clone;
106         }
107 }