/* * (c) Copyright 2010-2011 AgileBirds * * This file is part of OpenFlexo. * * OpenFlexo is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * OpenFlexo is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with OpenFlexo. If not, see <http://www.gnu.org/licenses/>. * */ package org.openflexo.drm; import java.io.FileOutputStream; import java.io.IOException; import java.util.Enumeration; import java.util.Vector; import org.openflexo.drm.dm.DocResourceCenterIsModified; import org.openflexo.drm.dm.DocResourceCenterIsSaved; import org.openflexo.foundation.rm.DuplicateResourceException; import org.openflexo.foundation.rm.FlexoResource; import org.openflexo.foundation.rm.FlexoStorageResource; import org.openflexo.foundation.rm.FlexoXMLStorageResource; import org.openflexo.foundation.rm.XMLStorageResourceData; import org.openflexo.xmlcode.StringEncoder; import org.openflexo.xmlcode.XMLCoder; public class DocResourceCenter extends DRMObject implements XMLStorageResourceData { // Vector of Language objects private Vector<Language> languages; // Vector of Authors objects private Vector<Author> authors; // Root folder private DocItemFolder rootFolder; public DocResourceCenter(DRMBuilder builder) { this(); builder.docResourceCenter = this; initializeDeserialization(builder); } public DocResourceCenter() { super(null); _docResourceCenter = this; rootFolder = null; languages = new Vector<Language>(); authors = new Vector<Author>(); } public Vector<Author> getAuthors() { return authors; } public void setAuthors(Vector<Author> authors) { this.authors = authors; setChanged(); } public void addToAuthors(Author author) { authors.add(author); setChanged(); } public void removeFromAuthors(Author author) { authors.remove(author); setChanged(); } public void addToLanguages(Language language) { languages.add(language); setChanged(); } public void removeFromLanguages(Language language) { languages.remove(language); setChanged(); } public Vector<Language> getLanguages() { return languages; } public void setLanguages(Vector<Language> languages) { this.languages = languages; setChanged(); } public DocItemFolder getRootFolder() { return rootFolder; } public void setRootFolder(DocItemFolder rootFolder) { this.rootFolder = rootFolder; setChanged(); } protected static DocResourceCenter createDefaultDocResourceCenter() { DocResourceCenter returned = new DocResourceCenter(); Language english = Language.createLanguage("ENGLISH", "english", returned); Language french = Language.createLanguage("FRENCH", "french", returned); Author author = Author.createAuthor(System.getProperty("user.name"), "Noname", "Nomail", returned); returned.addToLanguages(english); returned.addToLanguages(french); returned.addToAuthors(author); DocItemFolder rootFolder = DocItemFolder.createDocItemFolder(DocResourceManager.DOC_RESOURCE_CENTER, "Root folder for Flexo documentation", null, returned); returned.setRootFolder(rootFolder); DocItemFolder flexoModelFolder = DocItemFolder.createDocItemFolder(DocResourceManager.FLEXO_MODEL, "Description of Flexo model", rootFolder, returned); DocItemFolder flexoToolSetFolder = DocItemFolder.createDocItemFolder(DocResourceManager.FLEXO_TOOL_SET, "Description for the FlexoToolSet application", rootFolder, returned); DocItemFolder abstractModuleFolder = DocItemFolder.createDocItemFolder(DocResourceManager.ABSTRACT_MODULE, "Description of what is a module", flexoToolSetFolder, returned); DocItem abstractMainPaneItem = DocItem.createDocItem(DocResourceManager.ABSTRACT_MAIN_PANE, "Description of what is the main pane", abstractModuleFolder, returned, false); DocItem abstractControlPanelItem = DocItem.createDocItem(DocResourceManager.ABSTRACT_CONTROL_PANEL, "Description of what is the control panel", abstractModuleFolder, returned, false); DocItem abstractLeftViewItem = DocItem.createDocItem(DocResourceManager.ABSTRACT_LEFT_VIEW, "Description of what is the left view", abstractModuleFolder, returned, false); DocItem abstractRightViewItem = DocItem.createDocItem(DocResourceManager.ABSTRACT_RIGHT_VIEW, "Description of what is the right view", abstractModuleFolder, returned, false); abstractModuleFolder.getPrimaryDocItem().addToEmbeddingChildItems(abstractMainPaneItem); abstractModuleFolder.getPrimaryDocItem().addToEmbeddingChildItems(abstractControlPanelItem); abstractModuleFolder.getPrimaryDocItem().addToEmbeddingChildItems(abstractLeftViewItem); abstractModuleFolder.getPrimaryDocItem().addToEmbeddingChildItems(abstractRightViewItem); /*DocItem item1 = DocItem.createDocItem("Item1","a description for the item1",folder1,returned); item1.setTitle("This is a title for item 1",english); item1.setTitle("C'est un titre pour l'item 1",french); DocItemVersion version = DocItemVersion.createVersion(item1,"1.0",english,"hop en full","hop en short",returned); item1.submitVersion(version,author,returned);*/ return returned; } public DocItemFolder getModelFolder() { return getRootFolder().getItemFolderNamed("FlexoModel"); } public DocItemFolder getFTSFolder() { return getRootFolder().getItemFolderNamed("FlexoToolSet"); } @Override public void save() { FileOutputStream out = null; try { initializeSerialization(); out = new FileOutputStream(DocResourceManager.instance().getDRMFile()); String old = StringEncoder.getDateFormat(); StringEncoder.setDateFormat("HH:mm:ss dd/MM/yyyy"); XMLCoder.encodeObjectWithMapping(this, DocResourceManager.getDRMMapping(), out); StringEncoder.setDateFormat(old); out.flush(); } catch (Exception e) { e.printStackTrace(); } finally { try { if (out != null) { out.close(); } } catch (IOException e) { e.printStackTrace(); } finalizeSerialization(); } setChanged(); notifyObservers(new DocResourceCenterIsSaved()); clearIsModified(false); } public Author getUser() { Author returned = getAuthorNamed(System.getProperty("user.name")); if (returned == null) { returned = Author.createAuthor(System.getProperty("user.name"), "Noname", "Nomail", this); } return returned; } public Author getAuthorNamed(String authorIdentifier) { for (Enumeration en = getAuthors().elements(); en.hasMoreElements();) { Author next = (Author) en.nextElement(); if (next.getIdentifier().equals(authorIdentifier)) { return next; } } return null; } public Language getLanguageNamed(String languageIdentifier) { for (Enumeration en = getLanguages().elements(); en.hasMoreElements();) { Language next = (Language) en.nextElement(); if (next.getIdentifier().equalsIgnoreCase(languageIdentifier)) { return next; } } return null; } public DocItem getItemNamed(String aName) { if (getRootFolder() == null) { return null; } return getRootFolder().getItemNamed(aName); } @Override public FlexoXMLStorageResource getFlexoXMLFileResource() { // TODO Auto-generated method stub return null; } @Override public FlexoStorageResource getFlexoResource() { // TODO Auto-generated method stub return null; } @Override public void setFlexoResource(FlexoResource resource) throws DuplicateResourceException { // TODO Auto-generated method stub } /** * Return a vector of all embedded objects at this level does NOT include itself * * @return a Vector of Validable objects */ @Override public Vector<DocItemFolder> getEmbeddedValidableObjects() { Vector<DocItemFolder> returned = new Vector<DocItemFolder>(); returned.add(getRootFolder()); return returned; } @Override public synchronized void setIsModified() { boolean notifyObservers = false; if (!isModified()) { notifyObservers = true; } super.setIsModified(); if (notifyObservers) { setChanged(); notifyObservers(new DocResourceCenterIsModified()); setChanged(); } } public Vector getAllFoldersAndItems() { return getAllEmbeddedValidableObjects(); } public Vector<DocItem> getAllItems() { Vector<DocItem> returned = new Vector<DocItem>(); for (Enumeration en = getAllFoldersAndItems().elements(); en.hasMoreElements();) { DRMObject next = (DRMObject) en.nextElement(); if (next instanceof DocItem) { returned.add((DocItem) next); } } return returned; } @Override public String getClassNameKey() { return "doc_resource_center"; } /** * Overrides getIdentifier * * @see org.openflexo.drm.DRMObject#getIdentifier() */ @Override public String getIdentifier() { return "DocResourceCenter"; } }