Salome HOME
Fixed: adding a knowledge element (but there is still a double addition), opening...
[tools/siman.git] / Workspace / Siman-Common / src / org / splat / service / DocumentServiceImpl.java
1 /*****************************************************************************
2  * Company         EURIWARE
3  * Application     SIMAN
4  * File            $Id$ 
5  * Creation date   06.10.2012
6  * @author         $Author$
7  * @version        $Revision$
8  *****************************************************************************/
9
10 package org.splat.service; 
11
12 import java.text.DecimalFormat;
13 import java.text.SimpleDateFormat;
14 import java.util.Calendar;
15
16 import org.splat.dal.bo.som.Document;
17 import org.splat.dal.bo.som.Scenario;
18 import org.splat.dal.bo.som.Study;
19 import org.splat.dal.bo.som.Document.Properties;
20 import org.splat.dal.dao.som.Database;
21 import org.splat.kernel.InvalidPropertyException;
22 import org.splat.kernel.MissedPropertyException;
23 import org.splat.kernel.NotApplicableException;
24 import org.splat.service.technical.ProjectSettingsService;
25 import org.splat.service.technical.ProjectSettingsServiceImpl;
26 import org.splat.service.technical.ProjectSettingsServiceImpl.FileNaming;
27 import org.splat.som.Step;
28
29 /**
30  * @author RKV
31  *
32  */
33 public class DocumentServiceImpl implements DocumentService {
34
35         private StudyService _studyService;
36         private ProjectSettingsService _projectSettingsService;
37
38         public void generateDocumentId(Document aDoc, Properties dprop) {
39                 Study owner = null;
40                 if (dprop.getOwner() instanceof Study)
41                         owner = (Study) dprop.getOwner();
42                 else
43                         owner = ((Scenario) dprop.getOwner()).getOwnerStudy();
44
45                 SimpleDateFormat tostring = new SimpleDateFormat("yyyy");
46                 String year = tostring.format(owner.getDate());
47                 String filename = generateEncodedName(aDoc, owner);
48                 String path = owner.getReference();
49                 ProjectSettingsService.Step step = ProjectSettingsServiceImpl
50                                 .getStep(aDoc.getStep());
51                 aDoc.setDid( new StringBuffer(path).append(".%").append(aDoc.suformat).toString()); // Document reference
52                 path = new StringBuffer(year).append("/").append(path).append("/")
53                                 .append(step.getPath()) // File path relative to the repository vault
54                                 .append(filename).append(".").append(aDoc.getFile().getFormat()) // File name and extension
55                                 .toString();
56                 aDoc.getFile().changePath(path);
57         }
58
59         private String generateEncodedName(Document aDoc, Study scope) {
60                 // ------------------------------------------------
61                 StringBuffer encoding = new StringBuffer();
62                 FileNaming scheme = getProjectSettings().getFileNamingScheme();
63                 DecimalFormat tostring = new DecimalFormat(aDoc.suformat);
64
65                 int number = getStudyService().generateLocalIndex(scope);
66
67                 if (scheme == FileNaming.encoded) {
68                         encoding.append(scope.getReference()).append(".").append(
69                                         tostring.format(number));
70                 } else { // title and (temporarily) asis
71                         encoding.append(aDoc.getTitle()).append(".").append(tostring.format(number));
72                 }
73                 return encoding.toString();
74         }
75
76         private String getEncodedRootName(Document aDoc, Study scope) {
77                 // -----------------------------------------------
78                 FileNaming scheme = getProjectSettings().getFileNamingScheme();
79
80                 if (scheme == FileNaming.encoded)
81                         return scope.getReference();
82                 else
83                         return aDoc.getTitle();
84         }
85
86         /**
87          * Defines this document.
88          * 
89          * @param dprop
90          *            the properties of the document
91          * 
92          * @see Step#createDocument(Properties)
93          * @see #isUndefined()
94          */
95         public void initialize(Document aDoc, Properties dprop) throws MissedPropertyException,
96                         InvalidPropertyException, NotApplicableException {
97                 // --------------------------------------------
98                 if (!aDoc.isUndefined())
99                         throw new NotApplicableException(
100                                         "Cannot initialize an existing Document");
101                 if (dprop.getName() == null)
102                         throw new MissedPropertyException("name");
103                 if (dprop.getName().length() == 0)
104                         throw new InvalidPropertyException("name");
105                 if (dprop.getOwner() == null)
106                         throw new MissedPropertyException("owner");
107                 // if (dprop.owner instanceof Study && !ProjectSettings.getStep(step).appliesTo(Study.class)) {
108                 // throw new InvalidPropertyException("step");
109                 // }
110                 aDoc.setTitle(dprop.getName());
111                 aDoc.getFile().changePath(aDoc.getFile().getRelativePath().replace("%n",
112                                 getEncodedRootName(aDoc, (Study) dprop.getOwner())));
113                 if (aDoc.getHistory() == -1)
114                         aDoc.setHistory( 0 );
115                 if (dprop.getDate() == null) {
116                         Calendar current = Calendar.getInstance();
117                         aDoc.setLastModificationDate(current.getTime()); // Today
118                 } else {
119                         aDoc.setLastModificationDate(dprop.getDate());
120                 }
121                 Database.getSession().update(aDoc);
122         }
123
124         /**
125          * Get the studyService.
126          * @return the studyService
127          */
128         public StudyService getStudyService() {
129                 return _studyService;
130         }
131
132         /**
133          * Set the studyService.
134          * @param studyService the studyService to set
135          */
136         public void setStudyService(StudyService studyService) {
137                 _studyService = studyService;
138         }
139
140         /**
141          * Get project settings.
142          * 
143          * @return Project settings service
144          */
145         private ProjectSettingsService getProjectSettings() {
146                 return _projectSettingsService;
147         }
148
149         /**
150          * Set project settings service.
151          * 
152          * @param projectSettingsService
153          *            project settings service
154          */
155         public void setProjectSettings(ProjectSettingsService projectSettingsService) {
156                 _projectSettingsService = projectSettingsService;
157         }
158
159 }