/* * (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.rm; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Vector; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.Icon; import javax.swing.table.AbstractTableModel; import org.openflexo.foundation.DataModification; import org.openflexo.foundation.FlexoObservable; import org.openflexo.foundation.GraphicalFlexoObserver; import org.openflexo.foundation.rm.FlexoFileResource; import org.openflexo.foundation.rm.FlexoGeneratedResource; import org.openflexo.foundation.rm.FlexoImportedResource; import org.openflexo.foundation.rm.FlexoProject; import org.openflexo.foundation.rm.FlexoResource; import org.openflexo.foundation.rm.FlexoResourceData; import org.openflexo.foundation.rm.FlexoStorageResource; import org.openflexo.foundation.rm.FlexoXMLStorageResource; import org.openflexo.icon.IconLibrary; import org.openflexo.localization.FlexoLocalization; /** * Table model representing ResourceManager model * * @author sguerin * */ public abstract class ResourceManagerModel extends AbstractTableModel implements GraphicalFlexoObserver { private static final Logger logger = Logger.getLogger(ResourceManagerModel.class.getPackage().getName()); protected FlexoProject _project; protected List<FlexoResource<? extends FlexoResourceData>> _resources; public ResourceManagerModel(FlexoProject project) { super(); _project = project; _resources = new Vector<FlexoResource<? extends FlexoResourceData>>(); refresh(); project.addObserver(this); } protected void refresh() { if (logger.isLoggable(Level.FINE)) { logger.fine("refresh() in ResourceManagerModel"); } _resources.clear(); for (FlexoResource<? extends FlexoResourceData> resource : _project) { if (selectResource(resource)) { _resources.add(resource); } } fireTableDataChanged(); } public abstract boolean selectResource(FlexoResource resource); protected void delete() { _resources.clear(); _project.deleteObserver(this); } @Override public int getRowCount() { if (_resources == null) { return 0; } return _resources.size(); } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return false; } public FlexoResource<? extends FlexoResourceData> resourceAt(int rowIndex) { if (_resources != null && rowIndex < _resources.size()) { return _resources.get(rowIndex); } return null; } @Override public void setValueAt(Object value, int rowIndex, int columnIndex) { } public abstract String getTitle(); public abstract int getPreferedColumnSize(int col); /** * Implements * * @see org.openflexo.foundation.FlexoObserver#update(org.openflexo.foundation.FlexoObservable, * org.openflexo.foundation.DataModification) * @see org.openflexo.foundation.FlexoObserver#update(org.openflexo.foundation.FlexoObservable, * org.openflexo.foundation.DataModification) */ @Override public void update(FlexoObservable o, DataModification arg) { refresh(); } public static class StorageResourceModel extends ResourceManagerModel { public StorageResourceModel(FlexoProject project) { super(project); } @Override public boolean selectResource(FlexoResource resource) { return resource instanceof FlexoStorageResource; } @Override public String getTitle() { return FlexoLocalization.localizedForKeyWithParams("storage_resources_registered_for_project_($projectName)", _project); } @Override public int getColumnCount() { return 11; } public FlexoStorageResource storageResourceAt(int rowIndex) { return (FlexoStorageResource) resourceAt(rowIndex); } @Override public String getColumnName(int columnIndex) { if (columnIndex == 0) { return ""; } else if (columnIndex == 1) { return FlexoLocalization.localizedForKey("name"); } else if (columnIndex == 2) { return FlexoLocalization.localizedForKey("type"); } else if (columnIndex == 3) { return FlexoLocalization.localizedForKey("is_loaded"); } else if (columnIndex == 4) { return FlexoLocalization.localizedForKey("is_modified"); } else if (columnIndex == 5) { return FlexoLocalization.localizedForKey("last_memory_update"); } else if (columnIndex == 6) { return FlexoLocalization.localizedForKey("file_name"); } else if (columnIndex == 7) { return FlexoLocalization.localizedForKey("file_format"); } else if (columnIndex == 8) { return FlexoLocalization.localizedForKey("last_saved_on"); } else if (columnIndex == 9) { return FlexoLocalization.localizedForKey("version"); } else if (columnIndex == 10) { return FlexoLocalization.localizedForKey("active"); } return "???"; } @Override public int getPreferedColumnSize(int arg0) { switch (arg0) { case 0: return 25; // icon case 1: return 150; // name case 2: return 150; // type case 3: return 80; // is_loaded case 4: return 80; // is_modified case 5: return 120; // last_memory_update case 6: return 130; // file_name case 7: return 80; // file_format case 8: return 120; // last_saved_on case 9: return 50; // version case 10: return 50; // active default: return 50; } } @Override public Class<?> getColumnClass(int columnIndex) { if (columnIndex == 0) { return Icon.class; } else if (columnIndex == 1) { return String.class; } else if (columnIndex == 2) { return String.class; } else if (columnIndex == 3) { return Boolean.class; } else if (columnIndex == 4) { return Boolean.class; } else if (columnIndex == 5) { return String.class; } else if (columnIndex == 6) { return String.class; } else if (columnIndex == 7) { return String.class; } else if (columnIndex == 8) { return String.class; } else if (columnIndex == 9) { return String.class; } else if (columnIndex == 10) { return Boolean.class; } return String.class; } @Override public Object getValueAt(int rowIndex, int columnIndex) { if (_resources == null) { return null; } if (columnIndex == 0) { return IconLibrary.getIconForResourceType(resourceAt(rowIndex).getResourceType()); } else if (columnIndex == 1) { return resourceAt(rowIndex).getName(); } else if (columnIndex == 2) { return resourceAt(rowIndex).getResourceType().getName(); } else if (columnIndex == 3) { return new Boolean(storageResourceAt(rowIndex).isLoaded()); } else if (columnIndex == 4) { return new Boolean(storageResourceAt(rowIndex).isModified()); } else if (columnIndex == 5) { Date date = storageResourceAt(rowIndex).lastMemoryUpdate(); if (date != null) { if (date.getTime() == 0) { return "-"; } return new SimpleDateFormat("dd/MM HH:mm:ss SSS").format(date); } else { return "-"; } } else if (columnIndex == 6) { if (resourceAt(rowIndex) instanceof FlexoFileResource) { return ((FlexoFileResource) resourceAt(rowIndex)).getResourceFile().getRelativePath(); } else { return "-"; } } else if (columnIndex == 7) { return resourceAt(rowIndex).getResourceFormat().getIdentifier(); } else if (columnIndex == 8) { if (resourceAt(rowIndex) instanceof FlexoFileResource) { Date date = ((FlexoFileResource) resourceAt(rowIndex)).getDiskLastModifiedDate(); if (date != null) { if (date.getTime() == 0) { return "-"; } return new SimpleDateFormat("dd/MM HH:mm:ss SSS").format(date); } else { return "-"; } } else { return "-"; } } else if (columnIndex == 9) { if (resourceAt(rowIndex) instanceof FlexoXMLStorageResource) { return ((FlexoXMLStorageResource) resourceAt(rowIndex)).getXmlVersion().toString(); } else { return "-"; } } else if (columnIndex == 10) { return new Boolean(storageResourceAt(rowIndex).isActive()); } return null; } } public static class ImportedResourceModel extends ResourceManagerModel { public ImportedResourceModel(FlexoProject project) { super(project); } @Override public boolean selectResource(FlexoResource resource) { return resource instanceof FlexoImportedResource; } @Override public String getTitle() { return FlexoLocalization.localizedForKeyWithParams("imported_resources_registered_for_project_($projectName)", _project); } @Override public int getColumnCount() { return 10; } public FlexoImportedResource importedResourceAt(int rowIndex) { return (FlexoImportedResource) resourceAt(rowIndex); } @Override public String getColumnName(int columnIndex) { if (columnIndex == 0) { return ""; } else if (columnIndex == 1) { return FlexoLocalization.localizedForKey("name"); } else if (columnIndex == 2) { return FlexoLocalization.localizedForKey("type"); } else if (columnIndex == 3) { return FlexoLocalization.localizedForKey("is_loaded"); } else if (columnIndex == 4) { return FlexoLocalization.localizedForKey("last_import_date"); } else if (columnIndex == 5) { return FlexoLocalization.localizedForKey("file_name"); } else if (columnIndex == 6) { return FlexoLocalization.localizedForKey("file_format"); } else if (columnIndex == 7) { return FlexoLocalization.localizedForKey("disk_update"); } else if (columnIndex == 8) { return FlexoLocalization.localizedForKey("active"); } return "???"; } @Override public int getPreferedColumnSize(int arg0) { switch (arg0) { case 0: return 25; // icon case 1: return 150; // name case 2: return 150; // type case 3: return 80; // is_loaded case 4: return 120; // last_import_date case 5: return 130; // file_name case 6: return 80; // file_format case 7: return 120; // disk_upate case 8: return 50; // active default: return 50; } } @Override public Class<?> getColumnClass(int columnIndex) { if (columnIndex == 0) { return Icon.class; } else if (columnIndex == 1) { return String.class; } else if (columnIndex == 2) { return String.class; } else if (columnIndex == 3) { return Boolean.class; } else if (columnIndex == 4) { return String.class; } else if (columnIndex == 5) { return String.class; } else if (columnIndex == 6) { return String.class; } else if (columnIndex == 7) { return String.class; } else if (columnIndex == 8) { return Boolean.class; } return String.class; } @Override public Object getValueAt(int rowIndex, int columnIndex) { if (_resources == null) { return null; } if (columnIndex == 0) { return IconLibrary.getIconForResourceType(resourceAt(rowIndex).getResourceType()); } else if (columnIndex == 1) { return resourceAt(rowIndex).getName(); } else if (columnIndex == 2) { return resourceAt(rowIndex).getResourceType().getName(); } else if (columnIndex == 3) { return new Boolean(importedResourceAt(rowIndex).isLoaded()); } else if (columnIndex == 4) { Date date = importedResourceAt(rowIndex).getLastImportDate(); if (date != null) { if (date.getTime() == 0) { return "-"; } return new SimpleDateFormat("dd/MM HH:mm:ss SSS").format(date); } else { return "-"; } } else if (columnIndex == 5) { if (resourceAt(rowIndex) instanceof FlexoFileResource) { return ((FlexoFileResource) resourceAt(rowIndex)).getResourceFile().getRelativePath(); } else { return "-"; } } else if (columnIndex == 6) { return resourceAt(rowIndex).getResourceFormat().getIdentifier(); } else if (columnIndex == 7) { if (resourceAt(rowIndex) instanceof FlexoFileResource) { Date date = ((FlexoFileResource) resourceAt(rowIndex)).getDiskLastModifiedDate(); if (date != null) { if (date.getTime() == 0) { return "-"; } return new SimpleDateFormat("dd/MM HH:mm:ss SSS").format(date); } else { return "-"; } } else { return "-"; } } else if (columnIndex == 8) { return Boolean.valueOf(importedResourceAt(rowIndex).isActive()); } return null; } } public static class GeneratedResourceModel extends ResourceManagerModel { public GeneratedResourceModel(FlexoProject project) { super(project); } @Override public boolean selectResource(FlexoResource resource) { return resource instanceof FlexoGeneratedResource; } @Override public String getTitle() { return FlexoLocalization.localizedForKeyWithParams("generated_resources_registered_for_project_($projectName)", _project); } @Override public int getColumnCount() { return 11; } public FlexoGeneratedResource generatedResourceAt(int rowIndex) { return (FlexoGeneratedResource) resourceAt(rowIndex); } @Override public String getColumnName(int columnIndex) { if (columnIndex == 0) { return ""; } else if (columnIndex == 1) { return FlexoLocalization.localizedForKey("name"); } else if (columnIndex == 2) { return FlexoLocalization.localizedForKey("type"); } else if (columnIndex == 3) { return FlexoLocalization.localizedForKey("is_loaded"); } else if (columnIndex == 4) { return FlexoLocalization.localizedForKey("is_generated"); } else if (columnIndex == 5) { return FlexoLocalization.localizedForKey("last_generated_date"); } else if (columnIndex == 6) { return FlexoLocalization.localizedForKey("file_name"); } else if (columnIndex == 7) { return FlexoLocalization.localizedForKey("file_format"); } else if (columnIndex == 8) { return FlexoLocalization.localizedForKey("disk_update"); } else if (columnIndex == 9) { return FlexoLocalization.localizedForKey("active"); } return "???"; } @Override public int getPreferedColumnSize(int arg0) { switch (arg0) { case 0: return 25; // icon case 1: return 150; // name case 2: return 150; // type case 3: return 80; // is_loaded case 4: return 80; // is_generated case 5: return 120; // last_generation_update case 6: return 130; // file_name case 7: return 80; // file_format case 8: return 120; // disk_update case 9: return 50; // active default: return 50; } } @Override public Class<?> getColumnClass(int columnIndex) { if (columnIndex == 0) { return Icon.class; } else if (columnIndex == 1) { return String.class; } else if (columnIndex == 2) { return String.class; } else if (columnIndex == 3) { return Boolean.class; } else if (columnIndex == 4) { return Boolean.class; } else if (columnIndex == 5) { return String.class; } else if (columnIndex == 6) { return String.class; } else if (columnIndex == 7) { return String.class; } else if (columnIndex == 8) { return String.class; } else if (columnIndex == 9) { return Boolean.class; } return String.class; } @Override public Object getValueAt(int rowIndex, int columnIndex) { if (_resources == null) { return null; } if (columnIndex == 0) { return IconLibrary.getIconForResourceType(resourceAt(rowIndex).getResourceType()); } else if (columnIndex == 1) { return resourceAt(rowIndex).getName(); } else if (columnIndex == 2) { return resourceAt(rowIndex).getResourceType().getName(); } else if (columnIndex == 3) { return new Boolean(generatedResourceAt(rowIndex).isLoaded()); } else if (columnIndex == 4) { return new Boolean(generatedResourceAt(rowIndex).isLoaded()); } else if (columnIndex == 5) { Date date = generatedResourceAt(rowIndex).getLastGenerationDate(); if (date != null) { if (date.getTime() == 0) { return "-"; } return new SimpleDateFormat("dd/MM HH:mm:ss SSS").format(date); } else { return "-"; } } else if (columnIndex == 6) { if (resourceAt(rowIndex) instanceof FlexoFileResource) { return ((FlexoFileResource) resourceAt(rowIndex)).getResourceFile().getRelativePath(); } else { return "-"; } } else if (columnIndex == 7) { return resourceAt(rowIndex).getResourceFormat().getIdentifier(); } else if (columnIndex == 8) { if (resourceAt(rowIndex) instanceof FlexoFileResource) { Date date = ((FlexoFileResource) resourceAt(rowIndex)).getDiskLastModifiedDate(); if (date != null) { if (date.getTime() == 0) { return "-"; } return new SimpleDateFormat("dd/MM HH:mm:ss SSS").format(date); } else { return "-"; } } else { return "-"; } } else if (columnIndex == 9) { return new Boolean(generatedResourceAt(rowIndex).isActive()); } return null; } } }