001 /*
002 * file About.java
003 *
004 * Licensed Materials - Property of IBM
005 * Restricted Materials of IBM - you are allowed to copy, modify and
006 * redistribute this file as part of any program that interfaces with
007 * IBM Rational CM API.
008 *
009 * com.ibm.rational.teamapi.scout.actions.About
010 *
011 * © Copyright IBM Corporation 2004, 2008. All Rights Reserved.
012 * Note to U.S. Government Users Restricted Rights: Use, duplication or
013 * disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
014 */
015 package com.ibm.rational.teamapi.scout.actions;
016
017 import java.util.ArrayList;
018 import java.util.Iterator;
019 import java.util.Map;
020
021 import javax.wvcm.ProviderFactory;
022
023 import org.eclipse.jface.action.IAction;
024 import org.eclipse.jface.dialogs.MessageDialog;
025 import org.eclipse.jface.viewers.ISelection;
026 import org.eclipse.ui.IWorkbenchWindow;
027 import org.eclipse.ui.IWorkbenchWindowActionDelegate;
028
029 import com.ibm.rational.wvcm.stpex.StpExEnumerationBase;
030 import com.ibm.rational.wvcm.stp.StpException;
031 import com.ibm.rational.wvcm.stp.StpProvider;
032
033
034 /**
035 * An IWorkbenchWindowActionDelegate that tests the ability to instantiate a
036 * CM API provider.
037 *
038 * @see IWorkbenchWindowActionDelegate
039 */
040 public class About
041 implements IWorkbenchWindowActionDelegate
042 {
043 /** The handle on the About box handle */
044 private IWorkbenchWindow m_window;
045
046 /**
047 * Attempt to instantiate a CM API provider and report the results in a
048 * dialog box.
049 *
050 * @see IWorkbenchWindowActionDelegate#run
051 */
052 public void run(IAction action)
053 {
054 boolean debug = false;
055 ArrayList<String> about = new ArrayList<String>();
056
057 try {
058 String providerName = StpProvider.PROVIDER_CLASS;
059 StpProvider provider =
060 (StpProvider)ProviderFactory.createProvider(
061 providerName,
062 null);
063
064 about.add("Using " + provider.getClass().getName() + ", version "
065 + provider.getClass().getPackage().getImplementationVersion());
066
067 Package[] packages = Package.getPackages();
068
069 if (packages != null) {
070 for (int i = 0; i < packages.length; ++i) {
071 Package myPackage = packages[i];
072
073 if (
074 myPackage.getName().startsWith(
075 "com.ibm.rational.wvcm.stp")
076 || myPackage.getName().startsWith("javax.wvcm")) {
077 about.add(myPackage.getName());
078 about.add(" " + myPackage.getSpecificationTitle()
079 + ", " + myPackage.getSpecificationVersion() + ", "
080 + myPackage.getSpecificationVendor());
081
082 about.add("");
083 }
084 }
085 }
086
087 // Get the main interface package and display its name and version
088 Package stpPackage =
089 Package.getPackage("com.ibm.rational.wvcm.stp");
090
091 if (stpPackage != null)
092 about.add(stpPackage.getSpecificationTitle() + ", "
093 + stpPackage.getSpecificationVersion() + " for... ");
094
095 // Identify which repository types have providers at this time
096 Iterator types =
097 StpExEnumerationBase.enumerator(StpProvider.Domain.class);
098 Map errors = provider.getInstantiationErrors();
099
100 while (types.hasNext()) {
101 StpProvider.Domain type = (StpProvider.Domain)types.next();
102
103 if (!type.equals(StpProvider.Domain.NONE)
104 && !type.equals(StpProvider.Domain.INVALID)) {
105 StpException error = (StpException)errors.get(type);
106
107 about.add(type.toString() + " -- "
108 + (error == null ? "OK " : error.toString()));
109
110 if (debug && error != null)
111 error.printStackTrace();
112 }
113 }
114 } catch (Throwable ex) {
115 ex.printStackTrace();
116 about.add(ex.getClass().getName() + ": "
117 + ex.getLocalizedMessage());
118 }
119
120 StringBuffer msg = new StringBuffer();
121 Iterator iter = about.iterator();
122
123 while (iter.hasNext()) {
124 if (msg.length() > 0)
125 msg.append("\n");
126
127 msg.append(iter.next());
128 }
129
130 MessageDialog.openInformation(m_window.getShell(),
131 "CM API Scout Plug-in",
132 msg.toString());
133 }
134
135 /**
136 * @see IWorkbenchWindowActionDelegate#selectionChanged
137 */
138 public void selectionChanged(
139 IAction action,
140 ISelection selection) {}
141
142 /**
143 * @see IWorkbenchWindowActionDelegate#dispose
144 */
145 public void dispose() {}
146
147 /**
148 * @see IWorkbenchWindowActionDelegate#init
149 */
150 public void init(IWorkbenchWindow window)
151 {
152 this.m_window = window;
153 }
154 }