Salome HOME
Fix of checkin and removeDocument.
[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 net.sf.beanlib.PropertyInfo;
15 import net.sf.beanlib.spi.BeanTransformerSpi;
16 import net.sf.beanlib.spi.CustomBeanTransformerSpi;
17
18 import org.splat.log.AppLogger;
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 LOG = AppLogger
31                         .getLogger(DTOTransformer.class);
32
33         /**
34          * the bean transformer.
35          */
36         private final transient 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                         if (LOG.isDebugEnabled()) {
59                                 LOG.debug("From: null; To: " + toClass.getSimpleName());
60                         }
61                 } else {
62                         String fromName = from.getClass().getSimpleName();
63                         String toName = toClass.getSimpleName();
64                         if (LOG.isDebugEnabled()) {
65                                 LOG.debug("From: " + fromName + "; To: " + toName);
66                                 ok = (fromName.equals(toName + "DTO") || toName.equals(fromName
67                                                 + "DTO"));
68                         }
69                 }
70                 if (LOG.isDebugEnabled()) {
71                         LOG.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         @SuppressWarnings("unchecked")
85         public <T> T transform(final Object in, final Class<T> toClass,
86                         final PropertyInfo info) {
87                 if (LOG.isDebugEnabled()) {
88                         LOG.debug("Transform " + in.getClass().getSimpleName() + ": "
89                                         + in.toString() + " to " + toClass.getSimpleName());
90                 }
91                 Map<Object, Object> cloneMap = _beanTransformer.getClonedMap();
92                 Object clone = cloneMap.get(in);
93
94                 if (clone == null) {
95                         if (LOG.isDebugEnabled()) {
96                                 LOG.debug("Copy bean from " + info.getFromBean() + "."
97                                                 + info.getPropertyName() + " to " + info.getToBean() + "."
98                                                 + info.getPropertyName());
99                         }
100                         clone = BeanHelper.copyBean(in, toClass);
101                         cloneMap.put(in, clone);
102                 }
103                 return (T) clone;
104         }
105 }