/**
*
*/
package org.openflexo.doceditor.controller;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JLabel;
import org.openflexo.FlexoCst;
import org.openflexo.doceditor.controller.browser.FIBTOCBrowser;
import org.openflexo.doceditor.view.DERepositoryModuleView;
import org.openflexo.doceditor.view.DETOCEntryModuleView;
import org.openflexo.doceditor.view.TOCDataView;
import org.openflexo.foundation.FlexoModelObject;
import org.openflexo.foundation.rm.FlexoProject;
import org.openflexo.foundation.toc.TOCData;
import org.openflexo.foundation.toc.TOCEntry;
import org.openflexo.foundation.toc.TOCRepository;
import org.openflexo.icon.DEIconLibrary;
import org.openflexo.view.ModuleView;
import org.openflexo.view.controller.FlexoController;
import org.openflexo.view.controller.model.FlexoPerspective;
/**
* This perspective is used to represent all table of contents defined in the scope of current project<br>
* At the left is presented a browser allowing to browse into the TOC, at the middle are the TOCEntry represented and edited.
*
* @author sylvain
*
*/
public class TOCPerspective extends FlexoPerspective {
protected static final Logger logger = Logger.getLogger(TOCPerspective.class.getPackage().getName());
private FIBTOCBrowser tocBrowser;
private JLabel infoLabel;
private final DEController deController;
/**
* @param deController
*/
public TOCPerspective(DEController deController) {
super("table_of_contents");
this.deController = deController;
tocBrowser = new FIBTOCBrowser(deController);
infoLabel = new JLabel("Table of contents perspective");
infoLabel.setFont(FlexoCst.SMALL_FONT);
setTopLeftView(tocBrowser);
}
/**
* Overrides getIcon
*
* @see org.openflexo.view.FlexoPerspective#getActiveIcon()
*/
@Override
public ImageIcon getActiveIcon() {
return DEIconLibrary.DE_TOC_ACTIVE_ICON;
}
@Override
public JComponent getFooter() {
return infoLabel;
}
@Override
public FlexoModelObject getDefaultObject(FlexoModelObject proposedObject) {
if (proposedObject instanceof TOCEntry) {
return ((TOCEntry) proposedObject).getRepository();
}
if (proposedObject != null) {
FlexoProject project = proposedObject.getProject();
if (project != null) {
if (project.getTOCData().getRepositories().size() > 0) {
return project.getTOCData().getRepositories().firstElement();
} else {
return project.getTOCData();
}
}
}
return null;
}
@Override
public boolean hasModuleViewForObject(FlexoModelObject object) {
return object instanceof TOCEntry || object instanceof TOCRepository || object instanceof TOCData;
}
@Override
public ModuleView<? extends FlexoModelObject> createModuleViewForObject(FlexoModelObject object, FlexoController controller) {
if (object instanceof TOCRepository) {
return new DERepositoryModuleView((TOCRepository) object, (DEController) controller, this);
} else if (object instanceof TOCData) {
return new TOCDataView((TOCData) object, (DEController) controller);
} else if (object instanceof TOCEntry) {
return new DETOCEntryModuleView((TOCEntry) object, (DEController) controller, this);
}
if (logger.isLoggable(Level.INFO)) {
logger.info("No module view for object: " + object + " and perspective: " + this);
}
return null;
}
public void setProject(FlexoProject project) {
tocBrowser.setDataObject(project != null ? project.getTOCData() : null);
}
}