Salome HOME
Beans initialization is fixed. Document can be added to study now.
[tools/siman.git] / Workspace / Siman-Common / src / org / splat / service / DocumentServiceImpl.java
index cd86e081ca0402935ad6339fd54b5933d2e81ea8..fef0b9931e8e160367f3a7df3a902348a4c151d5 100644 (file)
 
 package org.splat.service; 
 
+import java.text.DecimalFormat;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+
+import org.splat.dal.bo.som.Document;
+import org.splat.dal.bo.som.Scenario;
+import org.splat.dal.bo.som.Study;
+import org.splat.dal.bo.som.Document.Properties;
+import org.splat.dal.dao.som.Database;
+import org.splat.kernel.InvalidPropertyException;
+import org.splat.kernel.MissedPropertyException;
+import org.splat.kernel.NotApplicableException;
+import org.splat.service.technical.ProjectSettingsService;
+import org.splat.service.technical.ProjectSettingsServiceImpl;
+import org.splat.service.technical.ProjectSettingsServiceImpl.FileNaming;
+import org.splat.som.Step;
+
 /**
  * @author RKV
  *
  */
 public class DocumentServiceImpl implements DocumentService {
 
+       private StudyService _studyService;
+       private ProjectSettingsService _projectSettingsService;
+
+       public void generateDocumentId(Document aDoc, Properties dprop) {
+               Study owner = null;
+               if (dprop.getOwner() instanceof Study)
+                       owner = (Study) dprop.getOwner();
+               else
+                       owner = ((Scenario) dprop.getOwner()).getOwnerStudy();
+
+               SimpleDateFormat tostring = new SimpleDateFormat("yyyy");
+               String year = tostring.format(owner.getDate());
+               String filename = generateEncodedName(aDoc, owner);
+               String path = owner.getReference();
+               ProjectSettingsService.Step step = ProjectSettingsServiceImpl
+                               .getStep(aDoc.getStep());
+               aDoc.setDid( new StringBuffer(path).append(".%").append(aDoc.suformat).toString()); // Document reference
+               path = new StringBuffer(year).append("/").append(path).append("/")
+                               .append(step.getPath()) // File path relative to the repository vault
+                               .append(filename).append(".").append(aDoc.getFile().getFormat()) // File name and extension
+                               .toString();
+               aDoc.getFile().changePath(path);
+       }
+
+       private String generateEncodedName(Document aDoc, Study scope) {
+               // ------------------------------------------------
+               StringBuffer encoding = new StringBuffer();
+               FileNaming scheme = getProjectSettings().getFileNamingScheme();
+               DecimalFormat tostring = new DecimalFormat(aDoc.suformat);
+
+               int number = getStudyService().generateLocalIndex(scope);
+
+               if (scheme == FileNaming.encoded) {
+                       encoding.append(scope.getReference()).append(".").append(
+                                       tostring.format(number));
+               } else { // title and (temporarily) asis
+                       encoding.append(aDoc.getTitle()).append(".").append(tostring.format(number));
+               }
+               return encoding.toString();
+       }
+
+       private String getEncodedRootName(Document aDoc, Study scope) {
+               // -----------------------------------------------
+               FileNaming scheme = getProjectSettings().getFileNamingScheme();
+
+               if (scheme == FileNaming.encoded)
+                       return scope.getReference();
+               else
+                       return aDoc.getTitle();
+       }
+
+       /**
+        * Defines this document.
+        * 
+        * @param dprop
+        *            the properties of the document
+        * 
+        * @see Step#createDocument(Properties)
+        * @see #isUndefined()
+        */
+       public void initialize(Document aDoc, Properties dprop) throws MissedPropertyException,
+                       InvalidPropertyException, NotApplicableException {
+               // --------------------------------------------
+               if (!aDoc.isUndefined())
+                       throw new NotApplicableException(
+                                       "Cannot initialize an existing Document");
+               if (dprop.getName() == null)
+                       throw new MissedPropertyException("name");
+               if (dprop.getName().length() == 0)
+                       throw new InvalidPropertyException("name");
+               if (dprop.getOwner() == null)
+                       throw new MissedPropertyException("owner");
+               // if (dprop.owner instanceof Study && !ProjectSettings.getStep(step).appliesTo(Study.class)) {
+               // throw new InvalidPropertyException("step");
+               // }
+               aDoc.setTitle(dprop.getName());
+               aDoc.getFile().changePath(aDoc.getFile().getRelativePath().replace("%n",
+                               getEncodedRootName(aDoc, (Study) dprop.getOwner())));
+               if (aDoc.getHistory() == -1)
+                       aDoc.setHistory( 0 );
+               if (dprop.getDate() == null) {
+                       Calendar current = Calendar.getInstance();
+                       aDoc.setLastModificationDate(current.getTime()); // Today
+               } else {
+                       aDoc.setLastModificationDate(dprop.getDate());
+               }
+               Database.getSession().update(aDoc);
+       }
+
+       /**
+        * Get the studyService.
+        * @return the studyService
+        */
+       public StudyService getStudyService() {
+               return _studyService;
+       }
+
+       /**
+        * Set the studyService.
+        * @param studyService the studyService to set
+        */
+       public void setStudyService(StudyService studyService) {
+               _studyService = studyService;
+       }
+
+       /**
+        * Get project settings.
+        * 
+        * @return Project settings service
+        */
+       private ProjectSettingsService getProjectSettings() {
+               return _projectSettingsService;
+       }
+
+       /**
+        * Set project settings service.
+        * 
+        * @param projectSettingsService
+        *            project settings service
+        */
+       public void setProjectSettings(ProjectSettingsService projectSettingsService) {
+               _projectSettingsService = projectSettingsService;
+       }
+
 }