SHARE
TWEET

Untitled

a guest Apr 12th, 2010 1,540 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. public class DeploymentLocationSelectionPage extends AbstractDeploymentWizardPage {
  2.         CheckboxTreeViewer locationViewer;
  3.         private Button overwriteProcesses;
  4.         private Button refreshListeners;
  5.         private Map<String,String> deploymentLocationMap = new HashMap<String,String>();
  6.  
  7.         // Default constructor is needed during extension initialization
  8.         public DeploymentLocationSelectionPage(){
  9.                 super(Messages.DeploymentLocationSelectionPage_0, null);
  10.                 setTitle(Messages.DeploymentLocationSelectionPage_18);
  11.                 setMessage(Messages.DeploymentLocationSelectionPage_19); //$NON-NLSv-1$
  12.         }
  13.  
  14.         public void createControl(Composite parent) {
  15.                 Composite composite = new Composite(parent,SWT.NONE);
  16.                 composite.setLayout(new GridLayout(1,false));
  17.                 //composite.setLayoutData(new GridData(GridData.FILL_BOTH));
  18.  
  19.                 locationViewer = createLocationViewer(composite);
  20.  
  21.                 Composite selectionButtonComposite = new Composite(composite, SWT.NONE);
  22.                 selectionButtonComposite.setLayout(new GridLayout(2,true));
  23.  
  24.                 GridData sData = new GridData(GridData.BEGINNING);
  25.                 sData.verticalAlignment = GridData.VERTICAL_ALIGN_BEGINNING;
  26.                 sData.verticalSpan = 2;
  27.  
  28.  
  29.                 Button selectAll = new Button(selectionButtonComposite, SWT.FLAT);
  30.                 selectAll.setText(Messages.DeploymentLocationSelectionPage_1);
  31.                 selectAll.setLayoutData(sData);
  32.                 selectAll.addSelectionListener(new SelectionAdapter(){
  33.                         public void widgetSelected(SelectionEvent e) {
  34.                                 setSelection(true);
  35.                         }
  36.                 });
  37.  
  38.                 Button unselectAll = new Button(selectionButtonComposite, SWT.FLAT);
  39.                 unselectAll.setText(Messages.DeploymentLocationSelectionPage_2);
  40.                 unselectAll.setLayoutData(sData);
  41.                 unselectAll.addSelectionListener(new SelectionAdapter(){
  42.                         public void widgetSelected(SelectionEvent e) {
  43.                                 setSelection(false);
  44.                         }
  45.                 });
  46.  
  47.                 GridData bData = new GridData();
  48.                 bData.horizontalSpan = 2;
  49.  
  50.                 overwriteProcesses = UIUtils.createCheckboxField(composite, Messages.DeploymentLocationSelectionPage_3);
  51.                 overwriteProcesses.setSelection(true);
  52.                 overwriteProcesses.setLayoutData(bData);
  53.                 overwriteProcesses.addSelectionListener(new ValidationListener());
  54.  
  55.                 refreshListeners = UIUtils.createCheckboxField(composite, Messages.DeploymentLocationSelectionPage_4);
  56.                 refreshListeners.setSelection(true);
  57.                 refreshListeners.setLayoutData(bData);
  58.                 refreshListeners.addSelectionListener(new ValidationListener());
  59.  
  60.  
  61.                 setControl(composite);
  62.         }
  63.  
  64.         private void setSelection(boolean state) {
  65.                 BaseTreeNode input = (BaseTreeNode) locationViewer.getInput();
  66.                 select(input, state);
  67.                 new ValidationListener().validate();
  68.         }
  69.  
  70.         /*
  71.          * Recursively select or unselect enabled nodes
  72.          */
  73.         private void select(ITreeNode root, boolean state) {
  74.                 ITreeNode[] children = root.getChildren();
  75.                 if (children.length != 0) {
  76.                         for(ITreeNode node : children){
  77.                                 if(node instanceof AbstractBaseProcessNode){
  78.                                         if(((AbstractBaseProcessNode)node).isEnabled()){
  79.                                                 locationViewer.setChecked(node, state);
  80.                                                 buildPath(node, new ArrayList<String>());
  81.                                         }
  82.                                 }
  83.                                 select(node, state);
  84.                         }
  85.                 }
  86.         }
  87.  
  88.         private CheckboxTreeViewer createLocationViewer(Composite composite){
  89.                 final CheckboxTreeViewer viewer = new CheckboxTreeViewer(composite, SWT.SINGLE | SWT.FULL_SELECTION | SWT.BORDER);
  90.  
  91.                 viewer.addCheckStateListener(new CheckBoxListener());
  92.  
  93.                 // listener responsible for disabling nodes upon of tree expansion
  94.                 viewer.addTreeListener(new ITreeViewerListener(){
  95.                         public void treeCollapsed(TreeExpansionEvent event) {}
  96.  
  97.                         public void treeExpanded(TreeExpansionEvent event) {
  98.                                 Object element = event.getElement();
  99.                                 AbstractBaseProcessNode node = (AbstractBaseProcessNode)element;
  100.                                 ITreeNode[] children = node.getChildren();
  101.                                 for(ITreeNode n : children){
  102.                                         if(n instanceof AbstractBaseProcessNode){
  103.                                                 AbstractBaseProcessNode aNode = (AbstractBaseProcessNode)n;
  104.                                                 if(!aNode.isEnabled()){
  105.                                                         locationViewer.setGrayChecked(aNode, true);
  106.                                                 }
  107.                                         }
  108.                                 }
  109.                         }
  110.                 });
  111.  
  112.                 // listener responsible for disabling nodes upon of tree expansion
  113.                 viewer.addTreeListener(new ITreeViewerListener(){
  114.                         public void treeCollapsed(TreeExpansionEvent event) {}
  115.  
  116.                         public void treeExpanded(TreeExpansionEvent event) {
  117.                                 Object element = event.getElement();
  118.                                 AbstractBaseProcessNode node = (AbstractBaseProcessNode)element;
  119.                                 ITreeNode[] children = node.getChildren();
  120.                                 for(ITreeNode n : children){
  121.                                         if(n instanceof AbstractBaseProcessNode){
  122.                                                 AbstractBaseProcessNode aNode = (AbstractBaseProcessNode)n;
  123.                                                 if(!aNode.isEnabled()){
  124.                                                         locationViewer.setGrayChecked(aNode, true);
  125.                                                         locationViewer.setChecked(aNode, false);
  126.                                                 }
  127.                                         }
  128.                                 }
  129.                         }
  130.  
  131.                 });
  132.  
  133.                 Tree tree = viewer.getTree();
  134.                 tree.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, true));
  135.                 tree.setLinesVisible(true);
  136.                 tree.setHeaderVisible(true);
  137.  
  138.                 TreeViewerColumn nameColumn = new TreeViewerColumn(viewer, SWT.NONE);
  139.                 nameColumn.getColumn().setText(Messages.DeploymentLocationSelectionPage_5);
  140.                 nameColumn.getColumn().setWidth(200);
  141.  
  142.                 TreeViewerColumn typeColumn = new TreeViewerColumn(viewer, SWT.NONE);
  143.                 typeColumn.getColumn().setText(Messages.DeploymentLocationSelectionPage_6);
  144.                 typeColumn.getColumn().setWidth(100);
  145.  
  146.                 TreeViewerColumn descriptionColumn = new TreeViewerColumn(viewer, SWT.NONE);
  147.                 descriptionColumn.getColumn().setText(Messages.DeploymentLocationSelectionPage_7);
  148.                 descriptionColumn.getColumn().setWidth(100);
  149.  
  150.                 return viewer;
  151.         }
  152.  
  153.         public void pageCleanup() {
  154.                 // TODO Auto-generated method stub
  155.  
  156.         }
  157.  
  158.         public void pageDisplay() {
  159.                 model.put(DeploymentConstants.DEPLOYMENT_PROCESS_PATH, deploymentLocationMap);
  160.                 locationViewer.setContentProvider(new ViewerContentProvider());
  161.                 locationViewer.setLabelProvider(new ViewerColumnLabelProvider());
  162.                 final URL url = (URL)model.get(DeploymentConstants.DEPLOYMENT_SERVER_URL);
  163.                 String configName = (String) model.get(DeploymentConstants.DEPLOYMENT_CONFIG_NAME);
  164.                 final GetDeploymentLocationsJob job = new GetDeploymentLocationsJob(Messages.DeploymentLocationSelectionPage_8, url,configName);
  165.                 job.schedule();
  166.                 job.addJobChangeListener(new JobChangeAdapter(){
  167.                         public void done(IJobChangeEvent event) {
  168.                                 if(event.getResult().getSeverity() == IStatus.OK){
  169.                                         PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable(){
  170.                                                 public void run() {
  171.                                                         ProcessDeployLocation[] deploymentLocation = job.getDeploymentLocation();
  172.                                                         DeploymentRootNode root = new DeploymentRootNode("root","base root"); //$NON-NLS-1$ //$NON-NLS-2$
  173.  
  174.                                                         BaseTreeNode tree = createTree(deploymentLocation,root);
  175.                                                         locationViewer.setInput(tree);
  176.  
  177.                                                         ITreeNode[] children = tree.getChildren();
  178.  
  179.                                                         for(ITreeNode node : children){
  180.                                                                 if(!((AbstractBaseProcessNode)node).isEnabled()){
  181.                                                                         locationViewer.setChecked(node, false);
  182.                                                                         locationViewer.setGrayed(node, true);
  183.                                                                         locationViewer.refresh();
  184.                                                                 }
  185.                                                         }
  186.                                                 }
  187.  
  188.  
  189.                                                 /**
  190.                                                  * A recursive method that builds a tree
  191.                                                  * @param deploymentLocation
  192.                                                  * @param root
  193.                                                  * @return
  194.                                                  */
  195.                                                 private BaseTreeNode createTree(ProcessDeployLocation[] deploymentLocation, BaseTreeNode root) {
  196.                                                         for(ProcessDeployLocation location : deploymentLocation){
  197.                                                                 LocationTypeNode node = new LocationTypeNode(location);
  198.                                                                 root.addChild(node, true);
  199.  
  200.                                                                 DeployedProcess[] deployedProcesses = location.getDeployedProcessArray();
  201.                                                                 for(DeployedProcess process : deployedProcesses){
  202.                                                                         node.addChild(new ProcessNode(process.getName(), process.getDescription()), true);
  203.                                                                 }
  204.                                                                 // if this is a parent call method with current node as the parent
  205.                                                                 if(location.getProcessDeployLocationArray().length > 0){
  206.                                                                         ProcessDeployLocation[] processDeployArray = location.getProcessDeployLocationArray();
  207.                                                                         createTree(processDeployArray, node);
  208.                                                                 }
  209.                                                         }
  210.                                                         return root;
  211.                                                 }
  212.                                         });
  213.                                 }
  214.                         }
  215.                 });
  216.         }
  217.  
  218.         protected void updateModel() {
  219.                 model.put(DeploymentConstants.OVERWRITE, new Boolean(overwriteProcesses.getSelection()));
  220.                 model.put(DeploymentConstants.REFRESH, new Boolean(refreshListeners.getSelection()));
  221.         }
  222.  
  223.         public boolean isPageComplete() {
  224.                 return validatePage();
  225.         }
  226.  
  227.         protected boolean validatePage() {
  228.                 setErrorMessage(null);
  229.                 if(deploymentLocationMap.size() == 0){
  230.                         setErrorMessage(Messages.DeploymentLocationSelectionPage_11);
  231.                         return false;
  232.                 }
  233.                 return true;
  234.         }
  235.  
  236.         private void buildPath(ITreeNode node, List<String> pathList) {
  237.                 String path = "/"; //$NON-NLS-1$
  238.                 String key = node.getName();
  239.  
  240.                 if(locationViewer.getChecked(node)){
  241.                         while(!(node instanceof DeploymentRootNode)){
  242.                                 pathList.add(node.getName());
  243.                                 node = node.getParent();
  244.                         }
  245.                         Collections.reverse(pathList);
  246.                         String[] array = pathList.toArray(new String[pathList.size()]);
  247.                         for(String item : array){
  248.                                 path += item + "/"; //$NON-NLS-1$
  249.                         }
  250.                         deploymentLocationMap.put(key, path.substring(0,path.length()-1));
  251.                 }
  252.                 else{
  253.                         deploymentLocationMap.remove(key);
  254.                 }
  255.         }
  256.  
  257.         class ViewerContentProvider implements ITreeContentProvider {
  258.  
  259.                 public Object[] getChildren(Object parentElement) {
  260.                         if(parentElement instanceof AbstractBaseProcessNode){
  261.                                 return ((AbstractBaseProcessNode)parentElement).getChildren();
  262.                         }
  263.                         return null;
  264.                 }
  265.  
  266.                 public Object getParent(Object element) {
  267.                         // TODO Auto-generated method stub
  268.                         return null;
  269.                 }
  270.  
  271.                 public boolean hasChildren(Object element) {
  272.                         if(element instanceof AbstractBaseProcessNode){
  273.                                 return ((AbstractBaseProcessNode)element).hasChildren();
  274.                         }
  275.                         return false;
  276.                 }
  277.  
  278.                 public Object[] getElements(Object inputElement) {
  279.                         if(inputElement instanceof AbstractBaseProcessNode){
  280.                                 AbstractBaseProcessNode node = (AbstractBaseProcessNode)inputElement;
  281.                                 return node.getChildren();
  282.                         }
  283.                         return null;
  284.                 }
  285.  
  286.                 public void dispose() {
  287.  
  288.                 }
  289.  
  290.                 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
  291.  
  292.                 }
  293.         }
  294.  
  295.         class ViewerColumnLabelProvider extends LabelProvider implements ITableLabelProvider{
  296.                 public Image getColumnImage(Object element, int columnIndex) {
  297.                         ImageRegistry reg = DesignerUIPlugin.getDefault().getImageRegistry();
  298.                         if(columnIndex == 0){
  299.                                 if(element instanceof LocationTypeNode){
  300.                                         LocationTypeNode node = (LocationTypeNode)element;
  301.                                         if(node.getName().equals("System")) //$NON-NLS-1$
  302.                                                 return reg.get(ImageConstants.SYSTEM_ICON);
  303.                                         else if(node.getName().equals("Listeners")){ //$NON-NLS-1$
  304.                                                 return reg.get(ImageConstants.LISTENER_ICON);
  305.                                         }
  306.                                         ITreeNode parent = node.getParent();
  307.                                         if(parent.getName().equals("Listeners")){ //$NON-NLS-1$
  308.                                                 return reg.get(ImageConstants.SUB_LOCATION_ICON);
  309.                                         }
  310.                                 }
  311.                                 else if(element instanceof ProcessNode){
  312.                                         return reg.get(ImageConstants.PROCESS_ICON);
  313.                                 }
  314.                         }
  315.                         return null;
  316.                 }
  317.  
  318.                 public String getColumnText(Object element, int columnIndex) {
  319.                         switch (columnIndex) {
  320.                         case 0:
  321.                                 return ((AbstractBaseProcessNode)element).getName();
  322.                         case 1:
  323.                                 return ((AbstractBaseProcessNode)element).getType().toString();
  324.                         case 2:
  325.                                 return ((AbstractBaseProcessNode)element).getDescription();
  326.                         default:
  327.                                 break;
  328.                         }
  329.                         return ""; //$NON-NLS-1$
  330.                 }
  331.         }
  332.  
  333.         private class CheckBoxListener extends ValidationListener implements ICheckStateListener{
  334.                 public void checkStateChanged(CheckStateChangedEvent event) {
  335.                         Object element = event.getElement();
  336.  
  337.                         // this is a routine to make nodes that are not enabled grayed out and unchecked at the time of the selection
  338.                         if(element instanceof AbstractBaseProcessNode){
  339.                                 AbstractBaseProcessNode e = (AbstractBaseProcessNode)element;
  340.  
  341.                                 if(e.isEnabled()){
  342.                                         //locationViewer.setChecked(element, checked);
  343.                                         List<String> pathList = new ArrayList<String>();
  344.                                         buildPath((ITreeNode)e, pathList);
  345.                                 }
  346.                                 if(e.hasChildren() && e.isEnabled()){
  347.                                         // go through all children and perform enable check
  348.                                         ITreeNode[] children = (ITreeNode[]) e.getChildren();
  349.  
  350.                                         for(ITreeNode node : children){
  351.                                                 if(node instanceof AbstractBaseProcessNode){
  352.                                                         // if child is disabled, make it so. Otherwise, check the children
  353.                                                         if(!((AbstractBaseProcessNode)node).isEnabled()){
  354.                                                                 locationViewer.setChecked(node, false);
  355.                                                                 locationViewer.setGrayed(node, true);
  356.                                                                 locationViewer.refresh();
  357.                                                         }
  358.                                                         else{
  359.                                                                 locationViewer.setChecked(node, locationViewer.getChecked(element));
  360.                                                         }
  361.                                                 }
  362.                                         }
  363.                                 }
  364.                                 // if node that is being selected is not enabled, make it appear so
  365.                                 else  if(!(e.isEnabled())){
  366.                                         locationViewer.setChecked(element, false);
  367.                                         locationViewer.setGrayed(element, true);
  368.                                         locationViewer.refresh();
  369.                                 }
  370.                         }
  371.                         validate();
  372.                 }
  373.  
  374.         }
  375. }
RAW Paste Data
Want to get better at Java?
Learn to code Java in 2017
Pastebin PRO Summer Special!
Get 40% OFF on Pastebin PRO accounts!
Top