blob: 042bb6353fd4efce03af27724122e01ee36f2f3e [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.fields;
import java.util.ArrayList;
import java.util.Set;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.search.IJavaSearchScope;
import org.eclipse.jdt.core.search.SearchEngine;
import org.eclipse.scout.nls.sdk.model.workspace.project.INlsProject;
import org.eclipse.scout.sdk.Texts;
import org.eclipse.scout.sdk.extensions.runtime.classes.IRuntimeClasses;
import org.eclipse.scout.sdk.ui.fields.javacode.EntityTextField;
import org.eclipse.scout.sdk.ui.fields.proposal.ProposalTextField;
import org.eclipse.scout.sdk.ui.fields.proposal.SiblingProposal;
import org.eclipse.scout.sdk.ui.fields.proposal.SimpleLabelProvider;
import org.eclipse.scout.sdk.ui.fields.proposal.SimpleProposalProvider;
import org.eclipse.scout.sdk.ui.fields.proposal.javaelement.AbstractJavaElementContentProvider;
import org.eclipse.scout.sdk.ui.fields.proposal.nls.NlsProposalDescriptionProvider;
import org.eclipse.scout.sdk.ui.fields.proposal.nls.NlsTextContentProvider;
import org.eclipse.scout.sdk.ui.fields.proposal.nls.NlsTextLabelProvider;
import org.eclipse.scout.sdk.ui.fields.proposal.nls.NlsTextSelectionHandler;
import org.eclipse.scout.sdk.ui.fields.proposal.signature.SignatureLabelProvider;
import org.eclipse.scout.sdk.ui.fields.proposal.signature.SignatureProposalProvider;
import org.eclipse.scout.sdk.ui.fields.proposal.signature.SignatureSubTypeProposalProvider;
import org.eclipse.scout.sdk.util.ScoutUtility;
import org.eclipse.scout.sdk.util.type.ITypeFilter;
import org.eclipse.scout.sdk.util.type.TypeFilters;
import org.eclipse.scout.sdk.util.type.TypeUtility;
import org.eclipse.scout.sdk.util.typecache.ITypeHierarchy;
import org.eclipse.scout.sdk.workspace.IScoutBundle;
import org.eclipse.scout.sdk.workspace.type.ScoutTypeComparators;
import org.eclipse.scout.sdk.workspace.type.ScoutTypeUtility;
import org.eclipse.swt.widgets.Composite;
public class FieldToolkit {
public StyledTextField createStyledTextField(Composite parent, String label) {
return new StyledTextField(parent, label);
}
public StyledTextField createStyledTextField(Composite parent, String label, int labelPercentage) {
return new StyledTextField(parent, label, labelPercentage);
}
public ProposalTextField createProposalField(Composite parent, String label) {
return createProposalField(parent, label, ProposalTextField.STYLE_DEFAULT);
}
public ProposalTextField createProposalField(Composite parent, String label, int style) {
return createProposalField(parent, label, style, TextField.DEFAULT_LABEL_PERCENTAGE);
}
public ProposalTextField createProposalField(Composite parent, String label, int style, int labelPercentage) {
if (label == null) {
label = "";
}
ProposalTextField field = new ProposalTextField(parent, style, labelPercentage);
field.setLabelText(label);
return field;
}
public ProposalTextField createNlsProposalTextField(Composite parent, INlsProject nlsProject, String label) {
return createNlsProposalTextField(parent, nlsProject, label, TextField.DEFAULT_LABEL_PERCENTAGE);
}
public ProposalTextField createNlsProposalTextField(Composite parent, INlsProject nlsProject, String label, int labelPercentage) {
ProposalTextField field = createProposalField(parent, label, ProposalTextField.STYLE_DEFAULT, labelPercentage);
NlsTextLabelProvider labelProvider = new NlsTextLabelProvider(nlsProject);
field.setLabelProvider(labelProvider);
field.setContentProvider(new NlsTextContentProvider(labelProvider));
field.setSelectionHandler(new NlsTextSelectionHandler(nlsProject));
field.setProposalDescriptionProvider(new NlsProposalDescriptionProvider());
return field;
}
public ProposalTextField createSignatureProposalField(Composite parent, String label, IScoutBundle bundle) {
return createSignatureProposalField(parent, label, bundle, null);
}
public ProposalTextField createSignatureProposalField(Composite parent, String label, IScoutBundle bundle, Set<String> mostlyUsed) {
return createSignatureProposalField(parent, label, bundle, mostlyUsed, TextField.DEFAULT_LABEL_PERCENTAGE);
}
public ProposalTextField createSignatureProposalField(Composite parent, String label, IScoutBundle bundle, Set<String> mostlyUsed, int labelPercentage) {
ProposalTextField field = createProposalField(parent, label, ProposalTextField.STYLE_DEFAULT, labelPercentage);
SignatureLabelProvider labelProvider = new SignatureLabelProvider();
field.setLabelProvider(labelProvider);
IJavaSearchScope jSearchScope = SearchEngine.createJavaSearchScope(new IJavaElement[]{ScoutUtility.getJavaProject(bundle)});
SignatureProposalProvider proposalProvider = new SignatureProposalProvider(jSearchScope, labelProvider, mostlyUsed, false);
field.setContentProvider(proposalProvider);
return field;
}
public ProposalTextField createSignatureSubTypeProposalField(Composite parent, String label, String baseTypeSignature, IJavaProject project, int labelPercentage) {
SignatureProposalProvider proposalProvider = new SignatureSubTypeProposalProvider(baseTypeSignature, project);
ProposalTextField field = createProposalField(parent, label, ProposalTextField.STYLE_DEFAULT, labelPercentage);
field.setContentProvider(proposalProvider);
field.setLabelProvider(proposalProvider.getLabelProvider());
return field;
}
public ProposalTextField createSiblingProposalField(Composite parent, IType declaringType, IType siblingDeclaringType, int labelPercentage) {
ITypeHierarchy localHierarchy = TypeUtility.getLocalTypeHierarchy(declaringType);
return createSiblingProposalField(parent, declaringType, siblingDeclaringType, localHierarchy, labelPercentage);
}
public ProposalTextField createSiblingProposalField(Composite parent, IType declaringType, IType siblingDeclaringType) {
return createSiblingProposalField(parent, declaringType, siblingDeclaringType, TextField.DEFAULT_LABEL_PERCENTAGE);
}
public ProposalTextField createSiblingProposalField(Composite parent, IType declaringType, IType siblingDeclaringType, ITypeHierarchy hierarchy) {
return createSiblingProposalField(parent, declaringType, siblingDeclaringType, hierarchy, TextField.DEFAULT_LABEL_PERCENTAGE);
}
public ProposalTextField createSiblingProposalField(Composite parent, IType declaringType, IType siblingDeclaringType, ITypeHierarchy hierarchy, int labelPercentage) {
ITypeFilter filter = TypeFilters.getMultiTypeFilter(TypeFilters.getClassFilter(), TypeFilters.getSubtypeFilter(siblingDeclaringType, hierarchy));
IType[] innerTypes = TypeUtility.getInnerTypes(declaringType, filter, ScoutTypeComparators.getOrderAnnotationComparator());
ArrayList<SiblingProposal> siblingList = new ArrayList<SiblingProposal>();
for (IJavaElement t : innerTypes) {
siblingList.add(new SiblingProposal(t));
}
siblingList.add(SiblingProposal.SIBLING_END);
ProposalTextField field = createProposalField(parent, Texts.get("Sibling"), ProposalTextField.STYLE_DEFAULT, labelPercentage);
field.setEnabled(siblingList.size() > 1);
field.setLabelProvider(new SimpleLabelProvider());
field.setContentProvider(new SimpleProposalProvider(siblingList.toArray(new SiblingProposal[siblingList.size()])));
return field;
}
public EntityTextField createEntityTextField(Composite parent, String label, IScoutBundle b) {
return createEntityTextField(parent, label, b, TextField.DEFAULT_LABEL_PERCENTAGE);
}
public EntityTextField createEntityTextField(Composite parent, String label, IScoutBundle p, int labelPercentage) {
EntityTextField text = new EntityTextField(parent, label, labelPercentage, p);
return text;
}
/**
* @param parent
* @param declaringType
* @return
*/
public ProposalTextField createFormFieldSiblingProposalField(Composite parent, IType declaringType) {
return createFormFieldSiblingProposalField(parent, declaringType, TextField.DEFAULT_LABEL_PERCENTAGE);
}
public ProposalTextField createFormFieldSiblingProposalField(Composite parent, IType declaringType, int labelPercentage) {
ITypeHierarchy localHierarchy = TypeUtility.getLocalTypeHierarchy(declaringType);
ProposalTextField field = createSiblingProposalField(parent, declaringType, TypeUtility.getType(IRuntimeClasses.IFormField), localHierarchy, labelPercentage);
SiblingProposal selectedProposal = SiblingProposal.SIBLING_END;
IType firstButton = ScoutTypeUtility.getFistProcessButton(declaringType, localHierarchy);
if (firstButton != null) {
selectedProposal = new SiblingProposal(firstButton);
}
field.acceptProposal(selectedProposal);
return field;
}
public ProposalTextField createJavaElementProposalField(Composite parent, String label, AbstractJavaElementContentProvider contentProvider) {
return createJavaElementProposalField(parent, label, contentProvider, TextField.DEFAULT_LABEL_PERCENTAGE);
}
public ProposalTextField createJavaElementProposalField(Composite parent, String label, AbstractJavaElementContentProvider contentProvider, int labelPercentage) {
ProposalTextField field = createProposalField(parent, label, ProposalTextField.STYLE_DEFAULT, labelPercentage);
if (contentProvider != null) {
field.setLabelProvider(contentProvider.getLabelProvider());
field.setContentProvider(contentProvider);
}
return field;
}
}