/* * (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.awt.BorderLayout; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.JTabbedPane; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import org.openflexo.components.AskForSaveResources; import org.openflexo.components.ProgressWindow; import org.openflexo.components.ProjectResourcesReviewer; import org.openflexo.foundation.FlexoException; 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.FlexoStorageResource; import org.openflexo.foundation.rm.SaveResourceException; import org.openflexo.foundation.rm.SaveResourceExceptionList; import org.openflexo.foundation.rm.SaveResourcePermissionDeniedException; import org.openflexo.localization.FlexoLocalization; import org.openflexo.view.FlexoDialog; import org.openflexo.view.FlexoFrame; import org.openflexo.view.controller.FlexoController; /** * Dialog displaying Resource Management Model * * @author sguerin * */ public class ResourceManagerWindow extends FlexoDialog implements ChangeListener { static final Logger logger = Logger.getLogger(ResourceManagerWindow.class.getPackage().getName()); protected ResourceManagerPanel _storageResourcesPanel; protected ResourceManagerPanel _importedResourcesPanel; protected ResourceManagerPanel _generatedResourcesPanel; private JTabbedPane tabbedPane; protected FlexoProject _project; private JButton saveSelectedButton; private JButton loadSelectedButton; private JButton deleteSelectedButton; private JButton saveAllButton; private JButton rebuildDependenciesButton; private JButton refreshButton; private JButton closeButton; // private RMViewerController rmViewerController; public ResourceManagerWindow(FlexoProject project) { super(FlexoFrame.getActiveFrame(), false); setTitle(FlexoLocalization.localizedForKey("resource_manager")); getContentPane().setLayout(new BorderLayout()); _storageResourcesPanel = new ResourceManagerPanel(project, new ResourceManagerModel.StorageResourceModel(project), this); _importedResourcesPanel = new ResourceManagerPanel(project, new ResourceManagerModel.ImportedResourceModel(project), this); _generatedResourcesPanel = new ResourceManagerPanel(project, new ResourceManagerModel.GeneratedResourceModel(project), this); _project = project; JPanel controlPanel = new JPanel(); controlPanel.setLayout(new FlowLayout()); saveSelectedButton = new JButton(FlexoLocalization.localizedForKey("save")); loadSelectedButton = new JButton(FlexoLocalization.localizedForKey("load")); deleteSelectedButton = new JButton(FlexoLocalization.localizedForKey("delete")); saveAllButton = new JButton(FlexoLocalization.localizedForKey("save_all")); rebuildDependenciesButton = new JButton(FlexoLocalization.localizedForKey("rebuild_dependancies")); refreshButton = new JButton(FlexoLocalization.localizedForKey("refresh")); closeButton = new JButton(FlexoLocalization.localizedForKey("close")); saveSelectedButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (getActivePanel() == _storageResourcesPanel) { if (_storageResourcesPanel.getSelectedResource() != null) { try { ((FlexoStorageResource) _storageResourcesPanel.getSelectedResource()).saveResourceData(); } catch (SaveResourceException e1) { // Warns about the exception if (logger.isLoggable(Level.WARNING)) { logger.warning("Exception raised: " + e1.getClass().getName() + ". See console for details."); } e1.printStackTrace(); } } } } }); loadSelectedButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (getActivePanel().getSelectedResource() != null) { try { FlexoResource resourceToLoad = getActivePanel().getSelectedResource(); if (resourceToLoad instanceof FlexoStorageResource) { ((FlexoStorageResource) resourceToLoad).getResourceData(); } else if (resourceToLoad instanceof FlexoImportedResource) { ((FlexoImportedResource) resourceToLoad).importResourceData(); } else if (resourceToLoad instanceof FlexoGeneratedResource) { ((FlexoGeneratedResource) resourceToLoad).getGeneratedResourceData(); } getActivePanel().getRMModel().fireTableDataChanged(); } catch (FlexoException exception) { // Warns about the exception if (logger.isLoggable(Level.WARNING)) { logger.warning("Exception raised: " + exception.getClass().getName() + ". See console for details."); } exception.printStackTrace(); } } } }); deleteSelectedButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (getActivePanel().getSelectedResource() != null) { getActivePanel().getSelectedResource().delete(); getActivePanel().getRMModel().fireTableDataChanged(); } } }); saveAllButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { ProjectResourcesReviewer reviewer = new ProjectResourcesReviewer(_project); if (reviewer.getStatus() == AskForSaveResources.SAVE) { try { reviewer.saveSelection(); } catch (SaveResourcePermissionDeniedException e1) { e1.printStackTrace(); if (e1.getFileResource().getFile().isDirectory()) { FlexoController.showError(FlexoLocalization.localizedForKey("permission_denied"), FlexoLocalization.localizedForKey("project_was_not_properly_saved_permission_denied_directory") + "\n" + e1.getFileResource().getFile().getAbsolutePath()); } else { FlexoController.showError(FlexoLocalization.localizedForKey("permission_denied"), FlexoLocalization.localizedForKey("project_was_not_properly_saved_permission_denied_file") + "\n" + e1.getFileResource().getFile().getAbsolutePath()); } } catch (SaveResourceExceptionList e1) { e1.printStackTrace(); FlexoController.showError(FlexoLocalization.localizedForKey("error_during_saving") + "\n" + e1.errorFilesList()); } } _importedResourcesPanel.getRMModel().fireTableDataChanged(); } }); rebuildDependenciesButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (!ProgressWindow.hasInstance()) { ProgressWindow.showProgressWindow(FlexoLocalization.localizedForKey("rebuild_dependancies"), _project.getResources() .size()); } _project.rebuildDependencies(ProgressWindow.instance()); ProgressWindow.hideProgressWindow(); _importedResourcesPanel.getRMModel().fireTableDataChanged(); _importedResourcesPanel.getRMModel().fireTableDataChanged(); _generatedResourcesPanel.getRMModel().fireTableDataChanged(); } }); refreshButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { _importedResourcesPanel.getRMModel().refresh(); _importedResourcesPanel.getRMModel().refresh(); _generatedResourcesPanel.getRMModel().refresh(); _importedResourcesPanel.getRMModel().fireTableDataChanged(); _importedResourcesPanel.getRMModel().fireTableDataChanged(); _generatedResourcesPanel.getRMModel().fireTableDataChanged(); } }); closeButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { setVisible(false); } }); controlPanel.add(saveSelectedButton); controlPanel.add(loadSelectedButton); controlPanel.add(deleteSelectedButton); controlPanel.add(saveAllButton); controlPanel.add(rebuildDependenciesButton); controlPanel.add(refreshButton); controlPanel.add(closeButton); JPanel contentPanel = new JPanel(); contentPanel.setLayout(new BorderLayout()); // rmViewerController = new RMViewerController(project); tabbedPane = new JTabbedPane(); tabbedPane.addChangeListener(this); tabbedPane.add(FlexoLocalization.localizedForKey("storage_resources"), _storageResourcesPanel); tabbedPane.add(FlexoLocalization.localizedForKey("imported_resources"), _importedResourcesPanel); tabbedPane.add(FlexoLocalization.localizedForKey("generated_resources"), _generatedResourcesPanel); // tabbedPane.add(FlexoLocalization.localizedForKey("viewer"), rmViewerController.getMainView()); contentPanel.add(tabbedPane, BorderLayout.CENTER); contentPanel.add(controlPanel, BorderLayout.SOUTH); getContentPane().add(contentPanel, BorderLayout.CENTER); update(); setModal(false); setSize(1000, 200); validate(); pack(); Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); setLocation((dim.width - getSize().width) / 2, (dim.height - getSize().height) / 2); setVisible(true); } public FlexoProject getProject() { return _project; } @Override public void dispose() { super.dispose(); _importedResourcesPanel.getRMModel().delete(); _importedResourcesPanel.getRMModel().delete(); _generatedResourcesPanel.getRMModel().delete(); } protected void update() { saveSelectedButton.setEnabled(getActivePanel() != null && getActivePanel() == _storageResourcesPanel && getActivePanel().getSelectedResource() != null); loadSelectedButton.setEnabled(getActivePanel() != null && getActivePanel().getSelectedResource() != null); deleteSelectedButton.setEnabled(getActivePanel() != null && getActivePanel().getSelectedResource() != null); } @Override public void stateChanged(ChangeEvent e) { update(); } protected ResourceManagerPanel getActivePanel() { if (tabbedPane.getSelectedComponent() instanceof ResourceManagerPanel) { return (ResourceManagerPanel) tabbedPane.getSelectedComponent(); } return null; } }