/*
* (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.ie;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JComponent;
import javax.swing.JPanel;
import org.openflexo.ApplicationContext;
import org.openflexo.foundation.InspectorGroup;
import org.openflexo.foundation.Inspectors;
import org.openflexo.foundation.ie.IEReusableComponent;
import org.openflexo.foundation.ie.IEWOComponent;
import org.openflexo.foundation.wkf.node.OperationNode;
import org.openflexo.ie.view.IEReusableWidgetComponentView;
import org.openflexo.ie.view.IEWOComponentView;
import org.openflexo.ie.view.controller.IEController;
import org.openflexo.module.FlexoModule;
import org.openflexo.module.Module;
import org.openflexo.module.external.ExternalIEController;
import org.openflexo.module.external.ExternalIEModule;
import org.openflexo.view.controller.FlexoController;
/**
* Interface Editor module
*
* @author sguerin
*/
public class IEModule extends FlexoModule implements ExternalIEModule {
private static final Logger logger = Logger.getLogger(IEModule.class.getPackage().getName());
private static final InspectorGroup[] inspectorGroups = new InspectorGroup[] { Inspectors.IE };
private IEWOComponentView componentView;
public IEModule(ApplicationContext applicationContext) throws Exception {
super(applicationContext);
IEPreferences.init();
}
@Override
public Module getModule() {
return Module.IE_MODULE;
}
@Override
public InspectorGroup[] getInspectorGroups() {
return inspectorGroups;
}
public IEController getIEController() {
return (IEController) getFlexoController();
}
@Override
protected FlexoController createControllerForModule() {
return new IEController(this);
}
@Override
public JComponent createViewForOperation(OperationNode operation) {
if (!operation.hasWOComponent()) {
return null;
}
if (componentView != null) {
if (logger.isLoggable(Level.WARNING)) {
logger.warning("Previous component view was not properly disposed, please invoke finalizeScreenshot() before requesting a new component.");
}
finalizeScreenshot();
}
JPanel pane = new JPanel();
pane.setLayout(new BorderLayout());
pane.setSize(1024, 768);
IEWOComponentView answer = new IEWOComponentView(getIEController(), operation.getComponentInstance());
if (operation.getTabComponent() != null) {
answer.setSelectedTab(operation.getTabComponent());
}
pane.add(answer.dropZone, BorderLayout.CENTER);
pane.validate();
pane.doLayout();
pane.repaint();
answer.dropZone.revalidate();
componentView = answer;
return pane;
}
/**
*
*/
@Override
public void finalizeScreenshot() {
if (componentView != null) {
if (componentView.getParent() != null) {
componentView.getParent().remove(componentView);
}
componentView.delete();
}
componentView = null;
}
/**
* Overrides getIEExternalController
*
* @see org.openflexo.module.external.ExternalIEModule#getIEExternalController()
*/
@Override
public ExternalIEController getIEExternalController() {
return getIEController();
}
/**
* Overrides getWOComponentView
*
* @see org.openflexo.module.external.ExternalIEModule#getWOComponentView(org.openflexo.module.external.ExternalIEController,
* org.openflexo.foundation.ie.IEWOComponent)
*/
@Override
public JComponent getWOComponentView(ExternalIEController controller, IEWOComponent component) {
if (componentView != null) {
if (logger.isLoggable(Level.WARNING)) {
logger.warning("Previous component view was not properly disposed, please invoke finalizeScreenshot() before requesting a new component.");
}
finalizeScreenshot();
}
JPanel pane = new JPanel();
pane.setLayout(new BorderLayout());
pane.setSize(1024, 768);
IEWOComponentView compView = null;
if (component instanceof IEReusableComponent) {
compView = new IEReusableWidgetComponentView((IEController) controller, ((IEReusableComponent) component)
.getComponentDefinition().getDummyComponentInstance());
} else {
compView = new IEWOComponentView((IEController) controller, component.getComponentDefinition().getDummyComponentInstance());
compView.setPreferredSize(new Dimension(compView.getMaxWidth(), compView.dropZone.getPreferredSize().height));
}
pane.add(compView.dropZone, BorderLayout.CENTER);
pane.validate();
pane.doLayout();
pane.repaint();
return pane;
}
}