Package ru.runa.specific.of

Source Code of ru.runa.specific.of.SwimlaneRunaOrgStructureElement$TimingsSettingsPage

package ru.runa.specific.of;

import java.util.Set;

import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.events.HyperlinkAdapter;
import org.eclipse.ui.forms.events.HyperlinkEvent;
import org.eclipse.ui.forms.widgets.Hyperlink;
import org.jbpm.ui.DesignerLogger;
import org.jbpm.ui.dialog.TreeItem;
import org.jbpm.ui.dialog.TreeViewSelectionDialog;
import org.jbpm.ui.orgfunctions.OrgFunctionDefinition;
import org.jbpm.ui.orgfunctions.SwimlaneElement;
import org.jbpm.ui.sync.SyncSettingsWizardPage;
import org.jbpm.ui.sync.SyncUIHelper;

import ru.runa.specific.of.RunaOrgStructureImporter.Actor;
import ru.runa.specific.of.RunaOrgStructureImporter.Department;
import ru.runa.specific.of.RunaOrgStructureImporter.Firm;
import ru.runa.specific.res.Messages;

public class SwimlaneRunaOrgStructureElement extends SwimlaneElement {
  private Hyperlink chooseExecutorLink;
  private Text selectionText;
 
  public SwimlaneRunaOrgStructureElement() {
    setOrgFunctionDefinitionName("ExecutorByCodeFunction");
  }

    @Override
    public void createGUI(Composite parent) {
        Composite clientArea = createSection(parent, 1);
       
        SyncUIHelper.createHeader(getClientArea(), RunaOrgStructureImporter.getInstance());

        Composite content = new Composite(clientArea, SWT.NONE);
        content.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        content.setLayout(new GridLayout(2, false));
        selectionText = new Text(content, SWT.READ_ONLY | SWT.BORDER);
        selectionText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        chooseExecutorLink = createLink(content, org.jbpm.ui.resource.Messages.getString("button.choose"));
        chooseExecutorLink.addHyperlinkListener(new HyperlinkAdapter() {

            @Override
            public void linkActivated(HyperlinkEvent e) {
                try {
                    TreeViewSelectionDialog dialog = new TreeViewSelectionDialog(Messages.getString("RunaOrgDialog.Text"));
                    dialog.setItems(getAsTree());
                    if (dialog.open() == IDialogConstants.OK_ID) {
                        TreeItem treeItem = dialog.getSelectedItem();
                        selectionText.setText(treeItem.getLabel());
                        selectionText.setForeground(treeItem.getColor());
                        OrgFunctionDefinition definition = createNew();
                        definition.getParameters().get(0).setValue((String) treeItem.getTag());
                        fireCompletedEvent(definition);
                    }
                } catch (Exception ex) {
                    DesignerLogger.logError("Unable to load executors", ex);
                }
            }
        });
    }

  private Set<Firm> getFirmsTree() throws Exception {
    return (Set<Firm>) RunaOrgStructureImporter.getInstance().loadCachedData();
  }
 
  private Actor getActorByCode(int id) throws Exception {
      Set<Firm> firms = getFirmsTree();
      for (Firm firm : firms) {
      for (Department department : firm.departments) {
        for (Actor actor : department.actors) {
          if (actor.id == id) {
            return actor;
          }
        }
      }
    }
      return null;
  }

    private TreeItem getAsTree() throws Exception {
      Set<Firm> firms = getFirmsTree();
      TreeItem root = new TreeItem("Root");
      for (Firm firm : firms) {
      TreeItem firmItem = new TreeItem(firm.name);
      root.addChild(firmItem);
      for (Department department : firm.departments) {
        TreeItem departmentItem = new TreeItem(department.shortName);
        firmItem.addChild(departmentItem);
        for (Actor actor : department.actors) {
          TreeItem actorItem = new TreeItem(actor.name);
          actorItem.setAllowSelection(true);
          actorItem.setTag(String.valueOf(actor.id));
          actorItem.setColor(actor.getForeground());
          departmentItem.addChild(actorItem);
        }
      }
    }
      return root;
    }

 
  @Override
  public void open(String path, String swimlaneName, OrgFunctionDefinition definition) {
    super.open(path, swimlaneName, definition);
    String value = "";
    if (currentDefinition != null && currentDefinition.getParameters().size() > 0) {
      value = currentDefinition.getParameters().get(0).getValue();
    }
    try {
      int actorId = Integer.parseInt(value);
      Actor actor = getActorByCode(actorId);
      if (actor != null) {
        value = actor.name;
        selectionText.setForeground(actor.getForeground());
      }
    } catch (Exception e) {
      // ignore for presentation
    }
    selectionText.setText(value);
  }

    public static class TimingsSettingsPage extends SyncSettingsWizardPage {

    public TimingsSettingsPage() {
            super(RunaOrgStructureImporter.getInstance(), Messages.getString("RunaOrgDialog.Header"));
        }

        @Override
    public void createControl(Composite parent) {
      super.createControl(parent);
          addTextField(TimingsConnectionResources.HOST, Messages.getString("RunaOrgDialog.HostPropName"), "rm_workflow", Messages.getString("example") + ": 'rm_workflow'");
          addTextField(TimingsConnectionResources.PORT, Messages.getString("RunaOrgDialog.PortPropName"), "8080", Messages.getString("example") + ": '8080'");
          addTextField(TimingsConnectionResources.SERVLET_URL, Messages.getString("RunaOrgDialog.URLPropName"), "/timings/employeeOrgStructureServlet.do", Messages.getString("example") + ": '/timings/employeeOrgStructureServlet.do'");
          addTextField(TimingsConnectionResources.PAST_DAYS_PERIOD, Messages.getString("RunaOrgDialog.PastDays"), Messages.getString("RunaOrgDialog.PastDays.Desc"));
    }

    @Override
    protected boolean testConnection() {
        // TODO properties.put(ConnectionResources.TEST_CONNECTION, "true");
        return super.testConnection();
    }
    }

}
TOP

Related Classes of ru.runa.specific.of.SwimlaneRunaOrgStructureElement$TimingsSettingsPage

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.