package org.aperteworkflow.util.vaadin; import com.vaadin.Application; import com.vaadin.ui.*; import org.aperteworkflow.ui.help.HelpProvider; import org.aperteworkflow.ui.help.HelpProviderFactory; import org.hibernate.Hibernate; import pl.net.bluesoft.rnd.processtool.ProcessToolContext; import pl.net.bluesoft.rnd.processtool.model.ProcessInstance; import pl.net.bluesoft.rnd.processtool.model.UserData; import pl.net.bluesoft.rnd.processtool.model.config.ProcessDefinitionConfig; import pl.net.bluesoft.rnd.processtool.service.UserFinder; import pl.net.bluesoft.rnd.processtool.ui.widgets.impl.BaseProcessToolWidget; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * @author tlipski@bluesoft.net.pl */ public abstract class BaseProcessToolWidgetWithHelp extends BaseProcessToolWidget implements UserFinder { protected HelpProvider helpProvider; private String helpDictionaryName; protected BaseProcessToolWidgetWithHelp(String helpDictionaryName) { this.helpDictionaryName = helpDictionaryName; } private void initHelpProvider() { if (helpProvider == null) { HelpProviderFactory helpProviderFactory = (HelpProviderFactory)ProcessToolContext.Util .getThreadProcessToolContext() .getRegistry() .lookupService(HelpProviderFactory.class.getName()); helpProvider = helpProviderFactory .getInstance(getApplication(), getProcessDefinitions(), !cannotEdit(), helpDictionaryName); if (helpProvider == null) { helpProvider = createDummyHelpProvider(); } } } public static HelpProvider createDummyHelpProvider() { return new HelpProvider() { @Override public Component helpIcon(String taskName, String s) { return new Label("no help loaded"); } @Override public Component getHelpIcon(String key) { return new Label("no help loaded"); } @Override public Component getHelpIcon(String key, String message) { return new Label("no help loaded"); } @Override public Field wrapFieldWithHelp(Field field, String key) { return new TextField("no help loaded"); } @Override public void prepare(Application application, List<ProcessDefinitionConfig> cfgs, boolean canEdit, String helpDictionaryName) { } @Override public Component wrapComponentWithHelp(Component component, String key) { return new Label("no help loaded"); } @Override public Component wrapComponentWithHelp(Component component, String key, String iconPlacement, String popupPlacement) { return new Label("no help loaded"); } @Override public void attachToLayout(Layout layout) { layout.addComponent(new Label("no help loaded")); } @Override public Field getFieldWithHelp(Field wrappedField, Component helpButton) { return new TextField("no help provided"); } @Override public void makeTableHelpEnabled(Table t) { //To change body of implemented methods use File | Settings | File Templates. } @Override public void addHelpForColumn(Table t, Object propertyId, String key) { //To change body of implemented methods use File | Settings | File Templates. } @Override public Field stripFieldFromHelp(Field f) { return f; } @Override public void makeTableHelpEnabled(Table t, Component helpPosition) { //nothing } @Override public void showHelpFor(Component component) { //nothing } }; } public HelpProvider getHelpProvider() { initHelpProvider(); return helpProvider; } public void setHelpProvider(HelpProvider helpProvider) { this.helpProvider = helpProvider; } public Component getHelpIcon(String key) { if (cannotEdit()) return new Label(""); initHelpProvider(); return helpProvider.getHelpIcon(key); } public Component getHelpIcon(String key, String message) { if (cannotEdit()) return new Label(""); initHelpProvider(); return helpProvider.helpIcon(key, message); } private boolean cannotEdit() { return !hasPermission("EDIT"); } public Field wrapFieldWithHelp(Field field, String key) { if (cannotEdit()) return field; initHelpProvider(); return helpProvider.wrapFieldWithHelp(field, key); } public Component wrapComponentWithHelp(Component component, String key) { if (cannotEdit()) return component; initHelpProvider(); return helpProvider.wrapComponentWithHelp(component, key); } public Component wrapComponentWithHelp(Component component, String key, String iconPlacement, String popupPlacement) { if (cannotEdit()) return component; initHelpProvider(); return helpProvider.wrapComponentWithHelp(component, key, iconPlacement, popupPlacement); } public String getHelpDictionaryName() { return helpDictionaryName; } /** * @deprecated contextHelpIsAttachedToMainWindow */ @Deprecated protected void attachContextHelpToLayout(){}; protected abstract ProcessDefinitionConfig getProcessDefinition(); protected List<ProcessDefinitionConfig> getProcessDefinitions() { return Arrays.asList(getProcessDefinition()); } protected List<ProcessDefinitionConfig> upToRootInstance(ProcessInstance processInstance) { List<ProcessDefinitionConfig> definitions = new ArrayList<ProcessDefinitionConfig>(); while (processInstance != null) { Hibernate.initialize(processInstance.getDefinition()); definitions.add(processInstance.getDefinition()); processInstance = processInstance.getParent(); } return definitions; } public UserData getUserByLogin(String login) { if (login != null && getApplication() instanceof GenericVaadinPortlet2BpmApplication) { return ((GenericVaadinPortlet2BpmApplication)getApplication()).getUser(login); } return null; } public UserData getUserByEmail(String email) { if (email != null && getApplication() instanceof GenericVaadinPortlet2BpmApplication) { return ((GenericVaadinPortlet2BpmApplication)getApplication()).getUserByEmail(email); } return null; } }