blob: 1eec301c573a0db3cd358e7c189a1bbc9e14a3bb [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 BSI Business Systems Integration AG.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* BSI Business Systems Integration AG - initial API and implementation
******************************************************************************/
package org.eclipse.scout.sdk.ui.internal.view.outline.pages.project.client.form.field;
import org.eclipse.jdt.core.Flags;
import org.eclipse.jdt.core.IType;
import org.eclipse.scout.sdk.Texts;
import org.eclipse.scout.sdk.extensions.runtime.classes.RuntimeClasses;
import org.eclipse.scout.sdk.operation.ITypeResolver;
import org.eclipse.scout.sdk.ui.action.IScoutHandler;
import org.eclipse.scout.sdk.ui.action.dto.TypeResolverFormDataAction;
import org.eclipse.scout.sdk.ui.internal.ScoutSdkUi;
import org.eclipse.scout.sdk.ui.internal.extensions.FormFieldExtensionPoint;
import org.eclipse.scout.sdk.ui.view.outline.pages.AbstractPage;
import org.eclipse.scout.sdk.ui.view.outline.pages.IPage;
import org.eclipse.scout.sdk.ui.view.outline.pages.IScoutPageConstants;
import org.eclipse.scout.sdk.ui.view.outline.pages.ITypePage;
import org.eclipse.scout.sdk.util.type.ITypeFilter;
import org.eclipse.scout.sdk.util.type.TypeComparators;
import org.eclipse.scout.sdk.util.type.TypeFilters;
import org.eclipse.scout.sdk.util.type.TypeUtility;
import org.eclipse.scout.sdk.util.typecache.ICachedTypeHierarchy;
import org.eclipse.scout.sdk.workspace.type.ScoutTypeFilters;
/**
* <h3>{@link FormFieldTemplateTablePage}</h3> ...
*
* @author Andreas Hoegger
* @since 1.0.8 11.09.2010
*/
public class FormFieldTemplateTablePage extends AbstractPage {
private ICachedTypeHierarchy m_formFieldHierarchy;
public FormFieldTemplateTablePage(IPage parent) {
setParent(parent);
setName(Texts.get("FormFields"));
setImageDescriptor(ScoutSdkUi.getImageDescriptor(ScoutSdkUi.FormFieldTemplate));
}
@Override
public void refresh(boolean clearCache) {
if (clearCache && m_formFieldHierarchy != null) {
m_formFieldHierarchy.invalidate();
}
super.refresh(clearCache);
}
@Override
public void unloadPage() {
if (m_formFieldHierarchy != null) {
m_formFieldHierarchy.removeHierarchyListener(getPageDirtyListener());
m_formFieldHierarchy = null;
}
super.unloadPage();
}
@Override
protected void loadChildrenImpl() {
for (IType fieldTemplate : resolveFormFieldTemplates()) {
ITypePage nodePage = (ITypePage) FormFieldExtensionPoint.createNodePage(fieldTemplate, m_formFieldHierarchy);
nodePage.setParent(this);
nodePage.setType(fieldTemplate);
}
}
protected IType[] resolveFormFieldTemplates() {
IType iFormField = TypeUtility.getType(RuntimeClasses.IFormField);
if (m_formFieldHierarchy == null) {
m_formFieldHierarchy = TypeUtility.getPrimaryTypeHierarchy(iFormField);
m_formFieldHierarchy.addHierarchyListener(getPageDirtyListener());
}
ITypeFilter filter = TypeFilters.getMultiTypeFilter(
ScoutTypeFilters.getInScoutBundles(getScoutBundle()),
TypeFilters.getFlagsFilter(Flags.AccAbstract | Flags.AccPublic)
);
IType[] allSubtypes = m_formFieldHierarchy.getAllSubtypes(iFormField, filter, TypeComparators.getTypeNameComparator());
return allSubtypes;
}
@Override
public void prepareMenuAction(IScoutHandler menu) {
if (menu instanceof TypeResolverFormDataAction) {
((TypeResolverFormDataAction) menu).init(new ITypeResolver() {
@Override
public IType[] getTypes() {
return resolveFormFieldTemplates();
}
}, getScoutBundle());
}
}
@SuppressWarnings("unchecked")
@Override
public Class<? extends IScoutHandler>[] getSupportedMenuActions() {
return new Class[]{TypeResolverFormDataAction.class};
}
@Override
public String getPageId() {
return IScoutPageConstants.FORM_FIELD_TEMPLATE_TABLE_PAGE;
}
@Override
public boolean isFolder() {
return true;
}
}