/* * (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.dre; import java.util.Enumeration; import java.util.logging.Level; import java.util.logging.Logger; import org.openflexo.GeneralPreferences; import org.openflexo.components.browser.BrowserConfiguration; import org.openflexo.components.browser.BrowserElement; import org.openflexo.components.browser.BrowserElementFactory; import org.openflexo.components.browser.BrowserElementType; import org.openflexo.components.browser.BrowserFilter.BrowserFilterStatus; import org.openflexo.components.browser.ConfigurableProjectBrowser; import org.openflexo.components.browser.ProjectBrowser; import org.openflexo.drm.DRMObject; import org.openflexo.drm.DocItem; import org.openflexo.drm.DocItemFolder; import org.openflexo.drm.DocResourceCenter; import org.openflexo.drm.DocResourceManager; import org.openflexo.drm.Language; import org.openflexo.drm.dm.DRMDataModification; import org.openflexo.foundation.DataModification; import org.openflexo.foundation.FlexoModelObject; import org.openflexo.foundation.FlexoObservable; import org.openflexo.foundation.param.DynamicDropDownParameter; import org.openflexo.foundation.rm.FlexoProject; import org.openflexo.view.controller.FlexoController; /** * Define what to put in the browser for this module * * @author yourname * */ public class DREBrowser extends ConfigurableProjectBrowser { protected static final Logger logger = Logger.getLogger(DREBrowser.class.getPackage().getName()); /* public static final Icon DOC_FOLDER_ICON = new ImageIconResource("Resources/IE/Folder.gif"); public static final Icon DOC_ITEM_ICON = new ImageIconResource("Resources/DRE/DocItem.gif"); public static final Icon UNDOCUMENTED_DOC_ITEM_ICON = new ImageIconResource("Resources/DRE/UndocumentedDocItem.gif"); public static final Icon APPROVING_PENDING_DOC_ITEM_ICON = new ImageIconResource("Resources/DRE/ApprovingPendingDocItem.gif"); public static final Icon AVAILABLE_NEW_VERSION_PENDING_DOC_ITEM_ICON = new ImageIconResource("Resources/DRE/AvailableNewVersionPendingDocItem.gif"); */ private DynamicDropDownParameter<Language> _availableLanguages; // ================================================ // ================ Constructor =================== // ================================================ public DREBrowser(FlexoController controller) { super(makeBrowserConfiguration(controller.getProject(), DocResourceManager.instance().getDocResourceCenter()), controller .getSelectionManager() /* Remove this parameter if you don't want browser synchronized with selection */); DocResourceCenter drc = DocResourceManager.instance().getDocResourceCenter(); Language currentLanguage = DocResourceManager.instance().getLanguage(GeneralPreferences.getLanguage()); DocItem.COMPARATOR.currentLanguage = currentLanguage; _availableLanguages = new DynamicDropDownParameter<Language>("language", "language", drc.getLanguages(), currentLanguage) { @Override public void setValue(Language value) { super.setValue(value); update(); DocItem.COMPARATOR.currentLanguage = value; } }; _availableLanguages.setFormatter("localizedName"); _availableLanguages.setShowReset(false); update(); } public static BrowserConfiguration makeBrowserConfiguration(final FlexoProject project, final DocResourceCenter docResourceCenter) { BrowserConfiguration returned = new DREBrowserConfiguration(project, docResourceCenter); return returned; } private static class DREBrowserConfiguration implements BrowserConfiguration { private FlexoProject _project; private DREBrowserElementFactory _factory; protected DocResourceCenter _docResourceCenter; protected DREBrowserConfiguration(FlexoProject project, DocResourceCenter docResourceCenter) { super(); _project = project; _docResourceCenter = docResourceCenter; _factory = new DREBrowserElementFactory(); } @Override public FlexoProject getProject() { return _project; } @Override public void configure(ProjectBrowser browser) { _factory.configure(browser); } @Override public FlexoModelObject getDefaultRootObject() { return _docResourceCenter.getRootFolder(); } @Override public BrowserElementFactory getBrowserElementFactory() { return _factory; } protected class DREBrowserElementFactory implements BrowserElementFactory { /* public BrowserElementType DOC_ITEM_FOLDER = new DocItemFolderElementType(); public DocItemElementType UNDOCUMENTED_DOC_ITEM = new UndocumentedDocItemElementType(); public DocItemElementType APPROVING_PENDING_DOC_ITEM = new ApprovingPendingDocItemElementType(); public DocItemElementType AVAILABLE_NEW_VERSION_PENDING_DOC_ITEM = new AvailableNewVersionPendingDocItemElementType(); public DocItemElementType UP_TO_DATE_DOC_ITEM = new UpToDateDocItemElementType();*/ public void configure(ProjectBrowser browser) { browser.setFilterStatus(BrowserElementType.UNDOCUMENTED_DOC_ITEM, BrowserFilterStatus.OPTIONAL_INITIALLY_SHOWN); browser.setFilterStatus(BrowserElementType.APPROVING_PENDING_DOC_ITEM, BrowserFilterStatus.OPTIONAL_INITIALLY_SHOWN); browser.setFilterStatus(BrowserElementType.AVAILABLE_NEW_VERSION_PENDING_DOC_ITEM, BrowserFilterStatus.OPTIONAL_INITIALLY_SHOWN); browser.setFilterStatus(BrowserElementType.UP_TO_DATE_DOC_ITEM, BrowserFilterStatus.OPTIONAL_INITIALLY_SHOWN); } /*public class DocItemFolderElementType extends BrowserElementType { public String getName() { return "doc_item_folder"; } public Class getElementClass() { return DocItemFolderElement.class; } public Icon getIcon() { return DOC_FOLDER_ICON; } } public abstract class DocItemElementType extends BrowserElementType { public Class getElementClass() { return DocItemElement.class; } public Icon getIcon() { return DOC_ITEM_ICON; } } public class UndocumentedDocItemElementType extends DocItemElementType { public String getName() { return "undocumented_doc_item"; } public Icon getIcon() { return UNDOCUMENTED_DOC_ITEM_ICON; } } public class ApprovingPendingDocItemElementType extends DocItemElementType { public String getName() { return "approving_pending_doc_item"; } public Icon getIcon() { return APPROVING_PENDING_DOC_ITEM_ICON; } } public class AvailableNewVersionPendingDocItemElementType extends DocItemElementType { public String getName() { return "available_new_version_pending_doc_item"; } public Icon getIcon() { return AVAILABLE_NEW_VERSION_PENDING_DOC_ITEM_ICON; } } public class UpToDateDocItemElementType extends DocItemElementType { public String getName() { return "available_uptodate_doc_item"; } public Icon getIcon() { return DOC_ITEM_ICON; } } */ @Override public BrowserElement makeNewElement(FlexoModelObject object, ProjectBrowser browser, BrowserElement parent) { if (object instanceof DocItemFolder) { return new DocItemFolderElement((DocItemFolder) object, browser, parent); } else if (object instanceof DocItem) { Language currentLanguage; if (browser instanceof DREBrowser) { currentLanguage = ((DREBrowser) browser).getActiveLanguage(); } else { currentLanguage = DocResourceManager.instance().getLanguage(GeneralPreferences.getLanguage()); } int status = ((DocItem) object).getStatusForLanguage(currentLanguage); if (status == DocItem.NO_DOCUMENTED) { return new DocItemElement((DocItem) object, BrowserElementType.UNDOCUMENTED_DOC_ITEM, browser, parent); } else if (status == DocItem.APPROVING_PENDING) { return new DocItemElement((DocItem) object, BrowserElementType.APPROVING_PENDING_DOC_ITEM, browser, parent); } else if (status == DocItem.AVAILABLE_NEWER_VERSION_PENDING) { return new DocItemElement((DocItem) object, BrowserElementType.AVAILABLE_NEW_VERSION_PENDING_DOC_ITEM, browser, parent); } else if (status == DocItem.AVAILABLE_UP_TO_DATE) { return new DocItemElement((DocItem) object, BrowserElementType.UP_TO_DATE_DOC_ITEM, browser, parent); } return null; } return null; } private abstract class AbstractDREElement extends BrowserElement { public AbstractDREElement(DRMObject object, BrowserElementType elementType, ProjectBrowser browser, BrowserElement parent) { super(object, elementType, browser, parent); } @Override public void update(FlexoObservable observable, DataModification dataModification) { if (logger.isLoggable(Level.FINE)) { logger.fine(getClass().getName() + " receive DataModification " + dataModification.getClass().getName()); } if (_browser != null && dataModification instanceof DRMDataModification) { refreshWhenPossible(); } else { super.update(observable, dataModification); } } } private class DocItemFolderElement extends AbstractDREElement { public DocItemFolderElement(DocItemFolder docItemFolder, ProjectBrowser browser, BrowserElement parent) { super(docItemFolder, BrowserElementType.DOC_ITEM_FOLDER, browser, parent); } @Override protected void buildChildrenVector() { for (Enumeration en = getDocItemFolder().getOrderedChildFolders().elements(); en.hasMoreElements();) { DocItemFolder next = (DocItemFolder) en.nextElement(); addToChilds(next); } for (Enumeration en = getDocItemFolder().getOrderedItems().elements(); en.hasMoreElements();) { DocItem next = (DocItem) en.nextElement(); if (next.getEmbeddingParentItem() == null || next.getEmbeddingParentItem().getFolder() != next.getFolder()) { addToChilds(next); } } } protected DocItemFolder getDocItemFolder() { return (DocItemFolder) getObject(); } @Override public String getName() { return getDocItemFolder().getIdentifier(); } } private class DocItemElement extends AbstractDREElement { public DocItemElement(DocItem docItem, BrowserElementType docItemElementType, ProjectBrowser browser, BrowserElement parent) { super(docItem, docItemElementType, browser, parent); } @Override public String getName() { if (getProjectBrowser() instanceof DREBrowser) { String title = getDocItem().getTitle(((DREBrowser) getProjectBrowser()).getActiveLanguage()); if (title != null && !title.trim().equals("")) { return getDocItem().getTitle(((DREBrowser) getProjectBrowser()).getActiveLanguage()); } } return "<" + getDocItem().getIdentifier() + ">"; } @Override protected void buildChildrenVector() { for (Enumeration en = getDocItem().getOrderedEmbeddingChildItems().elements(); en.hasMoreElements();) { DocItem next = (DocItem) en.nextElement(); addToChilds(next); } } protected DocItem getDocItem() { return (DocItem) getObject(); } } } } public DynamicDropDownParameter<Language> getAvailableLanguages() { return _availableLanguages; } public Language getActiveLanguage() { if (_availableLanguages != null) { return _availableLanguages.getValue(); } else { return DocResourceManager.instance().getLanguage(GeneralPreferences.getLanguage()); } } }