You can subscribe to this list here.
| 2006 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(7) |
Aug
|
Sep
(46) |
Oct
(102) |
Nov
(10) |
Dec
(21) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2007 |
Jan
(1) |
Feb
(3) |
Mar
(14) |
Apr
(9) |
May
(12) |
Jun
(4) |
Jul
(40) |
Aug
(60) |
Sep
(38) |
Oct
(2) |
Nov
(1) |
Dec
(42) |
| 2008 |
Jan
(23) |
Feb
(29) |
Mar
(107) |
Apr
(27) |
May
(3) |
Jun
(1) |
Jul
(15) |
Aug
(7) |
Sep
(19) |
Oct
|
Nov
(2) |
Dec
|
| 2009 |
Jan
(36) |
Feb
(4) |
Mar
(2) |
Apr
(1) |
May
(1) |
Jun
(15) |
Jul
(30) |
Aug
(32) |
Sep
(11) |
Oct
(21) |
Nov
(12) |
Dec
(15) |
| 2010 |
Jan
(29) |
Feb
(9) |
Mar
(25) |
Apr
|
May
(7) |
Jun
(5) |
Jul
(21) |
Aug
(32) |
Sep
(10) |
Oct
(8) |
Nov
(29) |
Dec
(8) |
| 2011 |
Jan
(9) |
Feb
(35) |
Mar
(11) |
Apr
(4) |
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
(2) |
Nov
(3) |
Dec
(30) |
| 2012 |
Jan
(5) |
Feb
(7) |
Mar
(10) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|
From: <hu...@us...> - 2006-12-17 17:18:06
|
Revision: 352
http://svn.sourceforge.net/cishell/?rev=352&view=rev
Author: huangb
Date: 2006-12-17 09:18:02 -0800 (Sun, 17 Dec 2006)
Log Message:
-----------
change the name shown up in the GUI from Console to Scheduler
Modified Paths:
--------------
trunk/clients/gui/org.cishell.reference.gui.scheduler/plugin.xml
Modified: trunk/clients/gui/org.cishell.reference.gui.scheduler/plugin.xml
===================================================================
--- trunk/clients/gui/org.cishell.reference.gui.scheduler/plugin.xml 2006-12-15 18:15:56 UTC (rev 351)
+++ trunk/clients/gui/org.cishell.reference.gui.scheduler/plugin.xml 2006-12-17 17:18:02 UTC (rev 352)
@@ -8,6 +8,6 @@
class="org.cishell.reference.gui.scheduler.SchedulerView"
icon="icons/log_icon.gif"
id="org.cishell.reference.gui.scheduler.SchedulerView"
- name="Console"/>
+ name="Scheduler"/>
</extension>
</plugin>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <bh...@us...> - 2006-12-15 18:16:09
|
Revision: 351
http://svn.sourceforge.net/cishell/?rev=351&view=rev
Author: bh2
Date: 2006-12-15 10:15:56 -0800 (Fri, 15 Dec 2006)
Log Message:
-----------
Added the scheduler to the official reference gui feature
Modified Paths:
--------------
trunk/deployment/org.cishell.reference.gui.feature/feature.xml
Modified: trunk/deployment/org.cishell.reference.gui.feature/feature.xml
===================================================================
--- trunk/deployment/org.cishell.reference.gui.feature/feature.xml 2006-12-15 16:28:26 UTC (rev 350)
+++ trunk/deployment/org.cishell.reference.gui.feature/feature.xml 2006-12-15 18:15:56 UTC (rev 351)
@@ -85,4 +85,11 @@
version="0.0.0"
unpack="false"/>
+ <plugin
+ id="org.cishell.reference.gui.scheduler"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
</feature>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <bh...@us...> - 2006-12-15 16:28:44
|
Revision: 350
http://svn.sourceforge.net/cishell/?rev=350&view=rev
Author: bh2
Date: 2006-12-15 08:28:26 -0800 (Fri, 15 Dec 2006)
Log Message:
-----------
Committing fix to allow Swing/AWT based algorithms (visualizations) to work on Mac OSX
Modified Paths:
--------------
trunk/clients/gui/org.cishell.reference.gui.menumanager/src/org/cishell/reference/gui/menumanager/Activator.java
Modified: trunk/clients/gui/org.cishell.reference.gui.menumanager/src/org/cishell/reference/gui/menumanager/Activator.java
===================================================================
--- trunk/clients/gui/org.cishell.reference.gui.menumanager/src/org/cishell/reference/gui/menumanager/Activator.java 2006-12-11 20:29:25 UTC (rev 349)
+++ trunk/clients/gui/org.cishell.reference.gui.menumanager/src/org/cishell/reference/gui/menumanager/Activator.java 2006-12-15 16:28:26 UTC (rev 350)
@@ -5,9 +5,12 @@
import org.cishell.reference.gui.menumanager.menu.MenuAdapter;
import org.cishell.reference.gui.workspace.CIShellApplication;
import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.awt.SWT_AWT;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IStartup;
import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
@@ -48,11 +51,22 @@
windows = getWorkbench().getWorkbenchWindows();
}
- Shell shell = windows[0].getShell();
+ final Shell shell = windows[0].getShell();
IMenuManager menuManager = CIShellApplication.getMenuManager();
CIShellContext ciContext = new LocalCIShellContext(context);
menuAdapter = new MenuAdapter(menuManager,shell,context,ciContext);
+
+ try {
+ //Fix to make swing based algorithms work on Macs
+ shell.getDisplay().syncExec(new Runnable(){
+ public void run() {
+ //This will simply initialize the SWT_AWT compatibility mode
+ SWT_AWT.new_Frame(new Shell(SWT.EMBEDDED));
+ }});
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
}
/**
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <bh...@us...> - 2006-12-11 20:29:43
|
Revision: 349
http://svn.sourceforge.net/cishell/?rev=349&view=rev
Author: bh2
Date: 2006-12-11 12:29:25 -0800 (Mon, 11 Dec 2006)
Log Message:
-----------
Made Ok be pushed by default when a user hits enter in a GUIBuilder based gui.
Modified Paths:
--------------
trunk/clients/gui/org.cishell.reference.gui.guibuilder.swt/src/org/cishell/reference/gui/guibuilder/swt/SWTGui.java
Modified: trunk/clients/gui/org.cishell.reference.gui.guibuilder.swt/src/org/cishell/reference/gui/guibuilder/swt/SWTGui.java
===================================================================
--- trunk/clients/gui/org.cishell.reference.gui.guibuilder.swt/src/org/cishell/reference/gui/guibuilder/swt/SWTGui.java 2006-12-08 16:21:08 UTC (rev 348)
+++ trunk/clients/gui/org.cishell.reference.gui.guibuilder.swt/src/org/cishell/reference/gui/guibuilder/swt/SWTGui.java 2006-12-11 20:29:25 UTC (rev 349)
@@ -125,6 +125,8 @@
}
}});
+ shell.setDefaultButton(okButton);
+
validate();
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <bh...@us...> - 2006-12-08 16:21:15
|
Revision: 348
http://svn.sourceforge.net/cishell/?rev=348&view=rev
Author: bh2
Date: 2006-12-08 08:21:08 -0800 (Fri, 08 Dec 2006)
Log Message:
-----------
initial commit of the intro paper tex project
Added Paths:
-----------
trunk/core/org.cishell.docs.intro/.project
trunk/core/org.cishell.docs.intro/.texlipse
trunk/core/org.cishell.docs.intro/src/
trunk/core/org.cishell.docs.intro/src/cishell+nwb.tex
trunk/core/org.cishell.docs.intro/src/cishell-short-text.tex
trunk/core/org.cishell.docs.intro/src/cishell-short.tex
trunk/core/org.cishell.docs.intro/src/graphics/
trunk/core/org.cishell.docs.intro/src/graphics/algorithmDefn.eps
trunk/core/org.cishell.docs.intro/src/graphics/algorithmDefn.png
trunk/core/org.cishell.docs.intro/src/graphics/algorithmDefn.svg
trunk/core/org.cishell.docs.intro/src/graphics/algorithmPool.png
trunk/core/org.cishell.docs.intro/src/graphics/algorithmPool.svg
trunk/core/org.cishell.docs.intro/src/graphics/cishell-using1.png
trunk/core/org.cishell.docs.intro/src/graphics/cishellLogo.png
trunk/core/org.cishell.docs.intro/src/graphics/connectingPools.png
trunk/core/org.cishell.docs.intro/src/graphics/connectingPools.svg
trunk/core/org.cishell.docs.intro/src/graphics/conversionGraph.png
trunk/core/org.cishell.docs.intro/src/graphics/conversionGraph.svg
trunk/core/org.cishell.docs.intro/src/graphics/ivlConversionGraph.jpg
trunk/core/org.cishell.docs.intro/src/graphics/ivlConversionGraph.png
trunk/core/org.cishell.docs.intro/src/graphics/ivlConversionGraph.svg
trunk/core/org.cishell.docs.intro/src/graphics/path10720.png
trunk/core/org.cishell.docs.intro/src/nwb+cishell-presentation-SC06.odp
trunk/core/org.cishell.docs.intro/src/nwb+cishell-presentation-SC06.pdf
trunk/core/org.cishell.docs.intro/src/nwb+cishell-presentation-SC06.ppt
trunk/core/org.cishell.docs.intro/src/nwb-graphics/
trunk/core/org.cishell.docs.intro/src/nwb-graphics/PIs.png
trunk/core/org.cishell.docs.intro/src/nwb-graphics/advisoryBoard.jpg
trunk/core/org.cishell.docs.intro/src/nwb-graphics/cishellnwb.png
trunk/core/org.cishell.docs.intro/src/nwb-graphics/developers.png
trunk/core/org.cishell.docs.intro/src/nwb-graphics/nsf4c.eps
trunk/core/org.cishell.docs.intro/src/nwb-graphics/nsf4c.png
trunk/core/org.cishell.docs.intro/src/nwb-graphics/nwbLogo.jpg
trunk/core/org.cishell.docs.intro/src/nwb-graphics/nwbScreenshot.eps
trunk/core/org.cishell.docs.intro/src/nwb-graphics/nwbScreenshot.jpg
trunk/core/org.cishell.docs.intro/src/nwb-graphics/nwbWiki.png
trunk/core/org.cishell.docs.intro/src/nwb-graphics/old-nwbScreenshot.jpg
trunk/core/org.cishell.docs.intro/src/nwb-short.tex
trunk/core/org.cishell.docs.intro/src/research-team.tex
trunk/core/org.cishell.docs.intro/src/resources.tex
Added: trunk/core/org.cishell.docs.intro/.project
===================================================================
--- trunk/core/org.cishell.docs.intro/.project (rev 0)
+++ trunk/core/org.cishell.docs.intro/.project 2006-12-08 16:21:08 UTC (rev 348)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.cishell.docs.intro</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>net.sourceforge.texlipse.builder.TexlipseBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>net.sourceforge.texlipse.builder.TexlipseNature</nature>
+ </natures>
+</projectDescription>
Added: trunk/core/org.cishell.docs.intro/.texlipse
===================================================================
--- trunk/core/org.cishell.docs.intro/.texlipse (rev 0)
+++ trunk/core/org.cishell.docs.intro/.texlipse 2006-12-08 16:21:08 UTC (rev 348)
@@ -0,0 +1,13 @@
+#TeXlipse project settings
+#Mon Nov 06 14:13:50 EST 2006
+builderNum=2
+outputDir=build/
+makeIndSty=
+bibrefDir=
+outputFormat=pdf
+tempDir=build/tmp/
+mainTexFile=cishell+nwb.tex
+outputFile=cishell+nwb.pdf
+langSpell=en
+markDer=true
+srcDir=src/
Added: trunk/core/org.cishell.docs.intro/src/cishell+nwb.tex
===================================================================
--- trunk/core/org.cishell.docs.intro/src/cishell+nwb.tex (rev 0)
+++ trunk/core/org.cishell.docs.intro/src/cishell+nwb.tex 2006-12-08 16:21:08 UTC (rev 348)
@@ -0,0 +1,32 @@
+\documentclass[10pt,letterpaper, twoside]{article}
+\usepackage[top=0.4in, left=0.5in, right=0.5in, bottom=0.6in,
+columnsep=0.4in]{geometry}
+\usepackage{graphicx}
+\usepackage{wrapfig}
+\usepackage{multicol}
+%\title{\includegraphics[width=160mm]{nwb-graphics/cishellnwb.png} \\
+%\textit{Presentation Notes}}
+\title{An Introduction to the Network Workbench and Cyberinfrastructure Shell \\
+\textit{Handout}}
+\author{Bruce Herr (bh...@bh...) & Weixia Huang (hu...@in...) \\
+\small{School of Library and Information Science, Indiana University,
+Bloomington, IN, USA}}
+\date{}
+% \includegraphics[width=190mm]{nwb-graphics/cishellnwb.png}
+
+\begin{document}
+
+\maketitle
+
+\begin{multicols*}{2}{
+\input{research-team}
+
+\input{cishell-short-text}
+
+\input{nwb-short}
+
+\input{resources}
+}
+\end{multicols*}
+
+\end{document}
\ No newline at end of file
Added: trunk/core/org.cishell.docs.intro/src/cishell-short-text.tex
===================================================================
--- trunk/core/org.cishell.docs.intro/src/cishell-short-text.tex (rev 0)
+++ trunk/core/org.cishell.docs.intro/src/cishell-short-text.tex 2006-12-08 16:21:08 UTC (rev 348)
@@ -0,0 +1,166 @@
+\section{Cyberinfrastructure Shell}
+
+% \noindent
+% \includegraphics[width=90mm]{graphics/cishellLogo.png}
+
+The Cyberinfrastructure Shell (CIShell) \cite{cishell} is an open source,
+software specification for the integration and utilization of datasets,
+algorithms, tools, and computing resources. The Cyberinfrastructure Shell (1)
+supports algorithm writers to write and disseminate their algorithms in their
+favorite programming language while retaining their intellectual rights after
+distribution; (2) data holders to easily disseminate their data for use by
+others; (3) application writers to design applications from custom sets of
+algorithms and datasets that interoperate seamlessly; and finally (4)
+researchers, educators, and practitioners to use existing datasets and
+algorithms to further science.
+
+Algorithm integration support is built in for Java and most other programming
+languages. Being Java based, CIShell runs on almost all platforms. The software
+and specification is released under the Apache 2.0 License.
+
+Subsequently, we describe the bundling, integration, and distribution of
+datasets and algorithms, the deployment of CIShell algorithms as service pools
+or applications, as well as the interlinkage of service pools and applications.
+We then address the issues of automatic data conversion and brandable graphical
+user interfaces (GUIs).
+
+\subsection{Defining Algorithms \& Datasets}
+
+%\begin{wrapfigure}{i}[-2mm]{45mm}
+\begin{center}
+\includegraphics[width=50mm]{graphics/algorithmDefn.png}
+\end{center}
+%\end{wrapfigure}
+
+Using CIShell, datasets and algorithms are bundled as CIShell-defined
+algorithms (see figure above). An algorithm is a black box that takes in
+zero or more datasets, some defined user parameters, and a so called CIShell
+Context. It then processes the inputs and returns an output in the form of zero
+or more datasets. The CIShell Context provides access to services offered by
+CIShell such as logging, preferences, GUI creation, and data conversion. The
+metadata dictionary associated with each algorithm can be used by applications
+to search with (see section 2.4). The metadata also comprises the author,
+citations, links to homepages, documentation, run-time complexity, etc. that
+ensures proper usage and citation.
+
+To give an example, a modeling algorithm takes in no data, some user-entered
+parameters (e.g., the number of nodes to create a random graph) and returns a
+single dataset (e.g., a randomly generated graph). An analysis algorithm takes
+in some data and possibly some user-entered parameters, analyses the graph,
+then returns a new graph or simply prints out analysis results on the console.
+A visualization algorithm takes in some data, opens a new window visualizing
+the data, and typically returns no data. Each dataset is bundled as a ‘dataset
+provider’, i.e., an algorithm that takes in no data or parameters, but returns
+a dataset that is then loaded into the CIShell system.
+
+\subsection{Algorithm \& Dataset Integration Templates}
+
+To ease the integration of algorithms and datasets, wizard-driven templates are
+provided that acquire information from the algorithm writer and then generate
+the appropriate files and resources. Templates are available to integrate
+arbitrary file-based datasets, compiled executable code, Java libraries, and
+Java-based algorithms. In the case of the Java-based template, after running
+the wizard, only one method needs to be filled in. This is the execute method for
+the actual algorithm. Integration of executable code typically does not require
+writing even one line of new code.
+
+\subsection{Algorithm \& Dataset Distribution}
+
+Distribution of algorithms and datasets is made easy by using
+Eclipse \cite{eclipse} update sites and the NWB Community Wiki. Eclipse update
+sites allow an algorithm writer to package up their algorithms as features and
+place them on a webserver. Any algorithm writer can create his or her own
+private or public update site. Algorithm users can download any subset of
+datasets and algorithms from any number of update sites. He or she simply needs
+to select Help/Update from the menu and search for new features or updates of
+the currently installed features.
+
+The NWB Community Wiki provides an easy interface for algorithm writers and data
+holders to post links to their algorithms and datasets, explain how to use
+them, and advertise their update sites (see section 4).
+
+\subsection{Creating A Pool}
+
+Algorithms defined in section 2.1 can be located and run by using a
+service registry that is provided by the underlying Open Services Gateway
+Initiative (OSGi) technology \cite{osgi}. This service registry defines a pool
+where services can be registered, searched for, and retrieved for use.
+\begin{wrapfigure}{i}[-2mm]{22mm}
+\includegraphics[width=22mm,height=22mm,clip=true]{graphics/algorithmPool.png}
+\end{wrapfigure} To be a service in OSGi, one must provide an interface, an
+implementation of the interface, and a dictionary of metadata about the
+service. For algorithms, the interface is AlgorithmFactory as defined by
+CIShell and the implementation and metadata as provided by the algorithm
+writer. All major components of CIShell are defined in terms of services
+available in the service registry.
+
+Once the algorithms are in the service pool (see figure above), CIShell
+applications can easily search for algorithms based on their metadata. A
+querying mechanism can be used by applications to find subsets of algorithms
+like all algorithms that belong in the visualization menu, all converter
+algorithms, etc. This is important for automatically converting data (see
+section 2.7).
+
+\subsection{Creating An Application}
+
+Every application that uses CIShell technology utilizes the OSGi Service
+Registry to locate and run algorithms. For example, a graphical user interface
+(GUI) application searches for all algorithms that have a menu path and puts
+them in their appropriate GUI menu; a scripting layer allows scripts to gain
+access to the algorithms in the service registry, etc. That is, algorithms are
+independent of their usage.
+
+\subsection{Connecting Pools \& Applications}
+
+Our future work aims to create CIShell web services and to support the
+interlinkage of multiple algorithm pools and web services in a peer-to-peer
+fashion. This inter-pool communication mechanism (see figure below) will also
+support client-server applications in which computationally demanding
+algorithms are run on servers and multiple CIShell clients can connect to it to
+use datasets, algorithms, and computing power.
+
+\begin{center}
+\includegraphics[width=70mm]{graphics/connectingPools.png}
+\end{center}
+
+\subsection{Automatic Data Conversion}
+
+Algorithms and the service registry can be utilized to solve another problem
+that arises when dealing with many algorithms written by different people from
+different scientific communities: the multitude of existing file formats. The
+data conversion service offered by CIShell supports the seamless conversion of
+different file formats.
+
+\begin{wrapfigure}{i}[-2mm]{40mm}
+\includegraphics[width=40mm,clip=true]{graphics/conversionGraph.png}
+\end{wrapfigure}
+
+The service searches through the service registry for converter algorithms
+(type=conversion in the algorithm's metadata) and builds a directed graph based
+on them in which edges are converters and nodes are file formats (see figure to
+the right). Edges can be weighted according to the 'losslessness',
+'complexity', or other features as reported in a converters' metadata.
+
+When asked to find a chain of converters from format A to format G, it searches
+the graph for the shortest (weighted) path and returns a valid chain of
+converters. The CIShell Reference GUI uses this data conversion service to
+identify those algorithms that can handle a selected dataset. Only applicable
+algorithms are selectable and only if the algorithm is selected will the data
+be converted into the appropriate format. Data format conversion happens
+invisibly to the user.
+
+\subsection{Brandable CIShell Reference GUI}
+
+The CIShell project includes a reference GUI that can be used directly or
+customized by application writers. The GUI (see figure below) is a menu-driven
+interface where all algorithms appears as menu items. Datasets can be loaded or
+simulated and are listed in the right-hand side data manager. When a user
+selects a dataset, the GUI determines if it can be used by any algorithms
+(either directly or through a series of converters). Only algorithms that can
+process the selected dataset are clickable, all others are grayed out. A
+console is provided to give information about the selected algorithms (authors,
+implementers, citations, etc.) and any output the algorithm logs when run.
+
+\begin{center}
+\includegraphics[width=2.24in]{graphics/cishell-using1.png}
+\end{center}
\ No newline at end of file
Added: trunk/core/org.cishell.docs.intro/src/cishell-short.tex
===================================================================
--- trunk/core/org.cishell.docs.intro/src/cishell-short.tex (rev 0)
+++ trunk/core/org.cishell.docs.intro/src/cishell-short.tex 2006-12-08 16:21:08 UTC (rev 348)
@@ -0,0 +1,14 @@
+\documentclass[10pt,letterpaper,twocolumn]{article}
+\usepackage[top=0.4in, left=0.5in, right=0.5in, bottom=0.6in]{geometry}
+\usepackage{graphicx}
+\usepackage{wrapfig}
+\title{Cyberinfrastructure Shell, what it is and why it's useful}
+
+\begin{document}
+
+\input{cishell-short-text}
+
+\input{resources}
+
+\end{document}
+
Added: trunk/core/org.cishell.docs.intro/src/graphics/algorithmDefn.eps
===================================================================
--- trunk/core/org.cishell.docs.intro/src/graphics/algorithmDefn.eps (rev 0)
+++ trunk/core/org.cishell.docs.intro/src/graphics/algorithmDefn.eps 2006-12-08 16:21:08 UTC (rev 348)
@@ -0,0 +1,2275 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: inkscape 0.43
+%%Pages: 1
+%%Orientation: Portrait
+%%BoundingBox: 100 486 280 536
+%%HiResBoundingBox: 100.23438 486.1887 279.10625 535.55
+%%EndComments
+%%Page: 1 1
+0 842 translate
+0.8 -0.8 scale
+gsave [1 0 0 1 0 0] concat
+gsave [1 0 0 1 11 2.322265] concat
+gsave
+1 1 1 setrgbcolor
+newpath
+286.5202 407.11179 moveto
+291.90242 419.81894 285.95755 434.50017 273.2504 439.88239 curveto
+260.54324 445.2646 245.86202 439.31973 240.4798 426.61258 curveto
+235.09758 413.90543 241.04245 399.2242 253.7496 393.84198 curveto
+257.09602 392.42458 260.19155 391.81699 263.82546 391.8643 curveto
+fill
+grestore
+0 0 0 setrgbcolor
+[] 0 setdash
+0.875 setlinewidth
+0 setlinejoin
+0 setlinecap
+newpath
+286.5202 407.11179 moveto
+291.90242 419.81894 285.95755 434.50017 273.2504 439.88239 curveto
+260.54324 445.2646 245.86202 439.31973 240.4798 426.61258 curveto
+235.09758 413.90543 241.04245 399.2242 253.7496 393.84198 curveto
+257.09602 392.42458 260.19155 391.81699 263.82546 391.8643 curveto
+stroke
+grestore
+gsave [1 0 0 1 1.889705 4.808111] concat
+gsave
+0 0 0 setrgbcolor
+newpath
+251.98047 411.15563 moveto
+250.64258 414.78356 lineto
+253.32324 414.78356 lineto
+251.98047 411.15563 lineto
+251.42383 410.18395 moveto
+252.54199 410.18395 lineto
+255.32031 417.47399 lineto
+254.29492 417.47399 lineto
+253.63086 415.60388 lineto
+250.34473 415.60388 lineto
+249.68066 417.47399 lineto
+248.64062 417.47399 lineto
+251.42383 410.18395 lineto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+256.34082 409.87634 moveto
+257.23926 409.87634 lineto
+257.23926 417.47399 lineto
+256.34082 417.47399 lineto
+256.34082 409.87634 lineto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+262.71289 414.67614 moveto
+262.71289 414.0251 262.5778 413.52055 262.30762 413.16247 curveto
+262.04069 412.8044 261.66471 412.62537 261.17969 412.62536 curveto
+260.69791 412.62537 260.32194 412.8044 260.05176 413.16247 curveto
+259.78483 413.52055 259.65137 414.0251 259.65137 414.67614 curveto
+259.65137 415.32393 259.78483 415.82686 260.05176 416.18493 curveto
+260.32194 416.543 260.69791 416.72204 261.17969 416.72204 curveto
+261.66471 416.72204 262.04069 416.543 262.30762 416.18493 curveto
+262.5778 415.82686 262.71289 415.32393 262.71289 414.67614 curveto
+263.61133 416.79528 moveto
+263.61132 417.72627 263.40462 418.418 262.99121 418.87048 curveto
+262.5778 419.3262 261.94466 419.55407 261.0918 419.55407 curveto
+260.77604 419.55407 260.47819 419.52966 260.19824 419.48083 curveto
+259.91829 419.43525 259.64648 419.36364 259.38281 419.26599 curveto
+259.38281 418.39196 lineto
+259.64648 418.53519 259.9069 418.64098 260.16406 418.70934 curveto
+260.42122 418.7777 260.68327 418.81188 260.9502 418.81188 curveto
+261.53938 418.81188 261.98046 418.65726 262.27344 418.34802 curveto
+262.5664 418.04203 262.71289 417.57816 262.71289 416.95642 curveto
+262.71289 416.51208 lineto
+262.52734 416.83435 262.28971 417.07523 262 417.23474 curveto
+261.71028 417.39424 261.3636 417.47399 260.95996 417.47399 curveto
+260.28939 417.47399 259.74902 417.21846 259.33887 416.70739 curveto
+258.92871 416.19633 258.72363 415.51924 258.72363 414.67614 curveto
+258.72363 413.82979 258.92871 413.15108 259.33887 412.64001 curveto
+259.74902 412.12895 260.28939 411.87341 260.95996 411.87341 curveto
+261.3636 411.87341 261.71028 411.95317 262 412.11267 curveto
+262.28971 412.27218 262.52734 412.51306 262.71289 412.83532 curveto
+262.71289 412.00524 lineto
+263.61133 412.00524 lineto
+263.61133 416.79528 lineto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+267.58105 412.63513 moveto
+267.09928 412.63513 266.71842 412.82393 266.43848 413.20153 curveto
+266.15853 413.57589 266.01855 414.09021 266.01855 414.7445 curveto
+266.01855 415.3988 266.1569 415.91475 266.43359 416.29235 curveto
+266.71354 416.6667 267.09603 416.85388 267.58105 416.85388 curveto
+268.05957 416.85388 268.4388 416.66507 268.71875 416.28747 curveto
+268.99869 415.90987 269.13867 415.39554 269.13867 414.7445 curveto
+269.13867 414.09672 268.99869 413.58402 268.71875 413.20642 curveto
+268.4388 412.82556 268.05957 412.63513 267.58105 412.63513 curveto
+267.58105 411.87341 moveto
+268.3623 411.87341 268.97591 412.12732 269.42188 412.63513 curveto
+269.86783 413.14294 270.09081 413.84607 270.09082 414.7445 curveto
+270.09081 415.63969 269.86783 416.34281 269.42188 416.85388 curveto
+268.97591 417.36169 268.3623 417.61559 267.58105 417.61559 curveto
+266.79655 417.61559 266.18131 417.36169 265.73535 416.85388 curveto
+265.29264 416.34281 265.07129 415.63969 265.07129 414.7445 curveto
+265.07129 413.84607 265.29264 413.14294 265.73535 412.63513 curveto
+266.18131 412.12732 266.79655 411.87341 267.58105 411.87341 curveto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+274.74414 412.84509 moveto
+274.64323 412.7865 274.53255 412.74418 274.41211 412.71813 curveto
+274.29492 412.68884 274.16471 412.67419 274.02148 412.67419 curveto
+273.51367 412.67419 273.12304 412.84021 272.84961 413.17224 curveto
+272.57943 413.50102 272.44433 413.97465 272.44434 414.59313 curveto
+272.44434 417.47399 lineto
+271.54102 417.47399 lineto
+271.54102 412.00524 lineto
+272.44434 412.00524 lineto
+272.44434 412.85485 lineto
+272.63314 412.52283 272.8789 412.27706 273.18164 412.11755 curveto
+273.48437 411.95479 273.85221 411.87341 274.28516 411.87341 curveto
+274.347 411.87341 274.41536 411.8783 274.49023 411.88806 curveto
+274.5651 411.89457 274.64811 411.90597 274.73926 411.92224 curveto
+274.74414 412.84509 lineto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+275.69629 412.00524 moveto
+276.59473 412.00524 lineto
+276.59473 417.47399 lineto
+275.69629 417.47399 lineto
+275.69629 412.00524 lineto
+275.69629 409.87634 moveto
+276.59473 409.87634 lineto
+276.59473 411.01403 lineto
+275.69629 411.01403 lineto
+275.69629 409.87634 lineto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+279.3584 410.45251 moveto
+279.3584 412.00524 lineto
+281.20898 412.00524 lineto
+281.20898 412.70349 lineto
+279.3584 412.70349 lineto
+279.3584 415.67224 lineto
+279.3584 416.1182 279.41862 416.40466 279.53906 416.53161 curveto
+279.66276 416.65856 279.91178 416.72204 280.28613 416.72204 curveto
+281.20898 416.72204 lineto
+281.20898 417.47399 lineto
+280.28613 417.47399 lineto
+279.59277 417.47399 279.11426 417.34541 278.85059 417.08825 curveto
+278.58691 416.82784 278.45508 416.35583 278.45508 415.67224 curveto
+278.45508 412.70349 lineto
+277.7959 412.70349 lineto
+277.7959 412.00524 lineto
+278.45508 412.00524 lineto
+278.45508 410.45251 lineto
+279.3584 410.45251 lineto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+286.94141 414.17321 moveto
+286.94141 417.47399 lineto
+286.04297 417.47399 lineto
+286.04297 414.20251 lineto
+286.04296 413.68493 285.94205 413.29757 285.74023 413.0404 curveto
+285.53841 412.78324 285.23567 412.65466 284.83203 412.65466 curveto
+284.347 412.65466 283.96452 412.80928 283.68457 413.11852 curveto
+283.40462 413.42777 283.26465 413.84932 283.26465 414.38317 curveto
+283.26465 417.47399 lineto
+282.36133 417.47399 lineto
+282.36133 409.87634 lineto
+283.26465 409.87634 lineto
+283.26465 412.85485 lineto
+283.47949 412.52608 283.73177 412.28031 284.02148 412.11755 curveto
+284.31445 411.95479 284.65136 411.87341 285.03223 411.87341 curveto
+285.66048 411.87341 286.13574 412.06873 286.45801 412.45934 curveto
+286.78027 412.84672 286.9414 413.41801 286.94141 414.17321 curveto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+293.00098 413.05505 moveto
+293.22558 412.65141 293.49413 412.35356 293.80664 412.16149 curveto
+294.11913 411.96944 294.48697 411.87341 294.91016 411.87341 curveto
+295.47981 411.87341 295.91926 412.07361 296.22852 412.47399 curveto
+296.53775 412.87113 296.69237 413.43754 296.69238 414.17321 curveto
+296.69238 417.47399 lineto
+295.78906 417.47399 lineto
+295.78906 414.20251 lineto
+295.78905 413.67842 295.69628 413.28943 295.51074 413.03552 curveto
+295.32519 412.78162 295.04198 412.65466 294.66113 412.65466 curveto
+294.19563 412.65466 293.82779 412.80928 293.55762 413.11852 curveto
+293.28743 413.42777 293.15234 413.84932 293.15234 414.38317 curveto
+293.15234 417.47399 lineto
+292.24902 417.47399 lineto
+292.24902 414.20251 lineto
+292.24902 413.67517 292.15625 413.28617 291.9707 413.03552 curveto
+291.78515 412.78162 291.49869 412.65466 291.11133 412.65466 curveto
+290.65234 412.65466 290.28776 412.81091 290.01758 413.12341 curveto
+289.74739 413.43266 289.6123 413.85258 289.6123 414.38317 curveto
+289.6123 417.47399 lineto
+288.70898 417.47399 lineto
+288.70898 412.00524 lineto
+289.6123 412.00524 lineto
+289.6123 412.85485 lineto
+289.81738 412.51957 290.06315 412.27218 290.34961 412.11267 curveto
+290.63606 411.95317 290.97623 411.87341 291.37012 411.87341 curveto
+291.76725 411.87341 292.10416 411.97432 292.38086 412.17614 curveto
+292.6608 412.37797 292.86751 412.67094 293.00098 413.05505 curveto
+fill
+grestore
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+200.28906 401.44617 moveto
+200.28906 405.98132 lineto
+201.24219 405.98132 lineto
+202.04687 405.98132 202.63541 405.79903 203.00781 405.43445 curveto
+203.38281 405.06987 203.57031 404.49435 203.57031 403.70789 curveto
+203.57031 402.92664 203.38281 402.35503 203.00781 401.99304 curveto
+202.63541 401.62846 202.04687 401.44617 201.24219 401.44617 curveto
+200.28906 401.44617 lineto
+199.5 400.79773 moveto
+201.12109 400.79773 lineto
+202.2513 400.79774 203.08072 401.03341 203.60938 401.50476 curveto
+204.13802 401.97352 204.40234 402.70789 204.40234 403.70789 curveto
+204.40234 404.7131 204.13671 405.45138 203.60547 405.92273 curveto
+203.07421 406.39408 202.24609 406.62976 201.12109 406.62976 curveto
+199.5 406.62976 lineto
+199.5 400.79773 lineto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+207.61328 404.43054 moveto
+207.03255 404.43054 206.63021 404.49695 206.40625 404.62976 curveto
+206.18229 404.76258 206.07031 404.98914 206.07031 405.30945 curveto
+206.07031 405.56466 206.15364 405.76778 206.32031 405.91882 curveto
+206.48958 406.06726 206.71875 406.14148 207.00781 406.14148 curveto
+207.40625 406.14148 207.72526 406.00086 207.96484 405.7196 curveto
+208.20703 405.43575 208.32812 405.05945 208.32812 404.5907 curveto
+208.32812 404.43054 lineto
+207.61328 404.43054 lineto
+209.04688 404.13367 moveto
+209.04688 406.62976 lineto
+208.32812 406.62976 lineto
+208.32812 405.9657 lineto
+208.16406 406.23132 207.95963 406.42794 207.71484 406.55554 curveto
+207.47005 406.68054 207.17057 406.74304 206.81641 406.74304 curveto
+206.36849 406.74304 206.01172 406.61804 205.74609 406.36804 curveto
+205.48307 406.11544 205.35156 405.7782 205.35156 405.35632 curveto
+205.35156 404.86414 205.51562 404.49304 205.84375 404.24304 curveto
+206.17448 403.99304 206.66666 403.86804 207.32031 403.86804 curveto
+208.32812 403.86804 lineto
+208.32812 403.79773 lineto
+208.32812 403.467 208.21875 403.2118 208 403.0321 curveto
+207.78385 402.84982 207.47916 402.75867 207.08594 402.75867 curveto
+206.83594 402.75867 206.59245 402.78862 206.35547 402.84851 curveto
+206.11849 402.90841 205.89062 402.99825 205.67188 403.11804 curveto
+205.67188 402.45398 lineto
+205.93489 402.35242 206.1901 402.2769 206.4375 402.22742 curveto
+206.68489 402.17534 206.92578 402.1493 207.16016 402.14929 curveto
+207.79297 402.1493 208.26562 402.31336 208.57812 402.64148 curveto
+208.89062 402.96961 209.04687 403.467 209.04688 404.13367 curveto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+211.24219 401.01257 moveto
+211.24219 402.25476 lineto
+212.72266 402.25476 lineto
+212.72266 402.81335 lineto
+211.24219 402.81335 lineto
+211.24219 405.18835 lineto
+211.24219 405.54513 211.29036 405.77429 211.38672 405.87585 curveto
+211.48568 405.97742 211.68489 406.0282 211.98438 406.0282 curveto
+212.72266 406.0282 lineto
+212.72266 406.62976 lineto
+211.98438 406.62976 lineto
+211.42969 406.62976 211.04687 406.5269 210.83594 406.32117 curveto
+210.625 406.11283 210.51953 405.73523 210.51953 405.18835 curveto
+210.51953 402.81335 lineto
+209.99219 402.81335 lineto
+209.99219 402.25476 lineto
+210.51953 402.25476 lineto
+210.51953 401.01257 lineto
+211.24219 401.01257 lineto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+215.66016 404.43054 moveto
+215.07942 404.43054 214.67708 404.49695 214.45312 404.62976 curveto
+214.22917 404.76258 214.11719 404.98914 214.11719 405.30945 curveto
+214.11719 405.56466 214.20052 405.76778 214.36719 405.91882 curveto
+214.53646 406.06726 214.76562 406.14148 215.05469 406.14148 curveto
+215.45312 406.14148 215.77213 406.00086 216.01172 405.7196 curveto
+216.2539 405.43575 216.375 405.05945 216.375 404.5907 curveto
+216.375 404.43054 lineto
+215.66016 404.43054 lineto
+217.09375 404.13367 moveto
+217.09375 406.62976 lineto
+216.375 406.62976 lineto
+216.375 405.9657 lineto
+216.21093 406.23132 216.00651 406.42794 215.76172 406.55554 curveto
+215.51692 406.68054 215.21745 406.74304 214.86328 406.74304 curveto
+214.41536 406.74304 214.05859 406.61804 213.79297 406.36804 curveto
+213.52995 406.11544 213.39844 405.7782 213.39844 405.35632 curveto
+213.39844 404.86414 213.5625 404.49304 213.89062 404.24304 curveto
+214.22135 403.99304 214.71354 403.86804 215.36719 403.86804 curveto
+216.375 403.86804 lineto
+216.375 403.79773 lineto
+216.375 403.467 216.26562 403.2118 216.04688 403.0321 curveto
+215.83073 402.84982 215.52604 402.75867 215.13281 402.75867 curveto
+214.88281 402.75867 214.63932 402.78862 214.40234 402.84851 curveto
+214.16536 402.90841 213.9375 402.99825 213.71875 403.11804 curveto
+213.71875 402.45398 lineto
+213.98177 402.35242 214.23698 402.2769 214.48438 402.22742 curveto
+214.73177 402.17534 214.97265 402.1493 215.20703 402.14929 curveto
+215.83984 402.1493 216.3125 402.31336 216.625 402.64148 curveto
+216.9375 402.96961 217.09375 403.467 217.09375 404.13367 curveto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+218.51172 400.55164 moveto
+220.16797 400.55164 lineto
+220.16797 401.11023 lineto
+219.23047 401.11023 lineto
+219.23047 407.12585 lineto
+220.16797 407.12585 lineto
+220.16797 407.68445 lineto
+218.51172 407.68445 lineto
+218.51172 400.55164 lineto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+223.38281 400.55164 moveto
+223.38281 407.68445 lineto
+221.72656 407.68445 lineto
+221.72656 407.12585 lineto
+222.66016 407.12585 lineto
+222.66016 401.11023 lineto
+221.72656 401.11023 lineto
+221.72656 400.55164 lineto
+223.38281 400.55164 lineto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+125.29297 416.60828 moveto
+126.08594 416.60828 lineto
+126.08594 420.15125 lineto
+126.08594 420.77625 126.19922 421.22677 126.42578 421.50281 curveto
+126.65234 421.77625 127.01953 421.91296 127.52734 421.91296 curveto
+128.03255 421.91296 128.39843 421.77625 128.625 421.50281 curveto
+128.85156 421.22677 128.96484 420.77625 128.96484 420.15125 curveto
+128.96484 416.60828 lineto
+129.75781 416.60828 lineto
+129.75781 420.2489 lineto
+129.75781 421.00932 129.56901 421.58354 129.19141 421.97156 curveto
+128.8164 422.35958 128.26172 422.55359 127.52734 422.55359 curveto
+126.79036 422.55359 126.23307 422.35958 125.85547 421.97156 curveto
+125.48047 421.58354 125.29297 421.00932 125.29297 420.2489 curveto
+125.29297 416.60828 lineto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+134 418.19421 moveto
+134 418.8739 lineto
+133.79687 418.76974 133.58593 418.69161 133.36719 418.63953 curveto
+133.14843 418.58745 132.92187 418.56141 132.6875 418.5614 curveto
+132.33073 418.56141 132.0625 418.61609 131.88281 418.72546 curveto
+131.70573 418.83484 131.61719 418.9989 131.61719 419.21765 curveto
+131.61719 419.38432 131.68099 419.51583 131.80859 419.61218 curveto
+131.9362 419.70594 132.19271 419.79578 132.57812 419.88171 curveto
+132.82422 419.9364 lineto
+133.33463 420.04578 133.69661 420.20073 133.91016 420.40125 curveto
+134.1263 420.59916 134.23437 420.87651 134.23438 421.23328 curveto
+134.23437 421.63953 134.07291 421.96114 133.75 422.19812 curveto
+133.42968 422.4351 132.98828 422.55359 132.42578 422.55359 curveto
+132.1914 422.55359 131.94661 422.53015 131.69141 422.48328 curveto
+131.4388 422.43901 131.17187 422.3713 130.89062 422.28015 curveto
+130.89062 421.53796 lineto
+131.15625 421.67599 131.41797 421.78015 131.67578 421.85046 curveto
+131.93359 421.91817 132.1888 421.95203 132.44141 421.95203 curveto
+132.77995 421.95203 133.04036 421.89474 133.22266 421.78015 curveto
+133.40494 421.66296 133.49609 421.4989 133.49609 421.28796 curveto
+133.49609 421.09265 133.42968 420.94291 133.29688 420.83875 curveto
+133.16666 420.73458 132.8789 420.63432 132.43359 420.53796 curveto
+132.18359 420.47937 lineto
+131.73828 420.38562 131.41667 420.24239 131.21875 420.04968 curveto
+131.02083 419.85437 130.92187 419.58745 130.92188 419.2489 curveto
+130.92187 418.83745 131.06771 418.51974 131.35938 418.29578 curveto
+131.65104 418.07182 132.0651 417.95984 132.60156 417.95984 curveto
+132.86719 417.95984 133.11718 417.97937 133.35156 418.01843 curveto
+133.58593 418.0575 133.80208 418.11609 134 418.19421 curveto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+139.125 420.07312 moveto
+139.125 420.42468 lineto
+135.82031 420.42468 lineto
+135.85156 420.91948 136 421.29708 136.26562 421.5575 curveto
+136.53385 421.81531 136.90625 421.94421 137.38281 421.94421 curveto
+137.65885 421.94421 137.92578 421.91036 138.18359 421.84265 curveto
+138.44401 421.77494 138.70182 421.67338 138.95703 421.53796 curveto
+138.95703 422.21765 lineto
+138.69921 422.32703 138.43489 422.41036 138.16406 422.46765 curveto
+137.89323 422.52494 137.61849 422.55359 137.33984 422.55359 curveto
+136.64193 422.55359 136.08854 422.35046 135.67969 421.94421 curveto
+135.27344 421.53796 135.07031 420.98849 135.07031 420.29578 curveto
+135.07031 419.57963 135.26302 419.01193 135.64844 418.59265 curveto
+136.03646 418.17078 136.55859 417.95984 137.21484 417.95984 curveto
+137.80338 417.95984 138.26823 418.14995 138.60938 418.53015 curveto
+138.95312 418.90776 139.125 419.42208 139.125 420.07312 curveto
+138.40625 419.86218 moveto
+138.40104 419.46896 138.29036 419.15515 138.07422 418.92078 curveto
+137.86067 418.68641 137.57682 418.56922 137.22266 418.56921 curveto
+136.82161 418.56922 136.5 418.6825 136.25781 418.90906 curveto
+136.01823 419.13562 135.88021 419.45463 135.84375 419.86609 curveto
+138.40625 419.86218 lineto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+142.83984 418.73718 moveto
+142.75911 418.69031 142.67057 418.65646 142.57422 418.63562 curveto
+142.48047 418.61219 142.3763 418.60047 142.26172 418.60046 curveto
+141.85547 418.60047 141.54297 418.73328 141.32422 418.9989 curveto
+141.10807 419.26193 141 419.64083 141 420.13562 curveto
+141 422.44031 lineto
+140.27734 422.44031 lineto
+140.27734 418.06531 lineto
+141 418.06531 lineto
+141 418.745 lineto
+141.15104 418.47937 141.34765 418.28276 141.58984 418.15515 curveto
+141.83203 418.02495 142.1263 417.95984 142.47266 417.95984 curveto
+142.52213 417.95984 142.57682 417.96375 142.63672 417.97156 curveto
+142.69661 417.97677 142.76302 417.98588 142.83594 417.9989 curveto
+142.83984 418.73718 lineto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+142.72266 419.92859 moveto
+144.82812 419.92859 lineto
+144.82812 420.56921 lineto
+142.72266 420.56921 lineto
+142.72266 419.92859 lineto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+149.71875 420.07312 moveto
+149.71875 420.42468 lineto
+146.41406 420.42468 lineto
+146.44531 420.91948 146.59375 421.29708 146.85938 421.5575 curveto
+147.1276 421.81531 147.5 421.94421 147.97656 421.94421 curveto
+148.2526 421.94421 148.51953 421.91036 148.77734 421.84265 curveto
+149.03776 421.77494 149.29557 421.67338 149.55078 421.53796 curveto
+149.55078 422.21765 lineto
+149.29296 422.32703 149.02864 422.41036 148.75781 422.46765 curveto
+148.48698 422.52494 148.21224 422.55359 147.93359 422.55359 curveto
+147.23568 422.55359 146.68229 422.35046 146.27344 421.94421 curveto
+145.86719 421.53796 145.66406 420.98849 145.66406 420.29578 curveto
+145.66406 419.57963 145.85677 419.01193 146.24219 418.59265 curveto
+146.63021 418.17078 147.15234 417.95984 147.80859 417.95984 curveto
+148.39713 417.95984 148.86198 418.14995 149.20312 418.53015 curveto
+149.54687 418.90776 149.71875 419.42208 149.71875 420.07312 curveto
+149 419.86218 moveto
+148.99479 419.46896 148.88411 419.15515 148.66797 418.92078 curveto
+148.45442 418.68641 148.17057 418.56922 147.81641 418.56921 curveto
+147.41536 418.56922 147.09375 418.6825 146.85156 418.90906 curveto
+146.61198 419.13562 146.47396 419.45463 146.4375 419.86609 curveto
+149 419.86218 lineto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+154.53516 419.79968 moveto
+154.53516 422.44031 lineto
+153.81641 422.44031 lineto
+153.81641 419.82312 lineto
+153.8164 419.40906 153.73567 419.09917 153.57422 418.89343 curveto
+153.41276 418.68771 153.17057 418.58484 152.84766 418.58484 curveto
+152.45963 418.58484 152.15364 418.70854 151.92969 418.95593 curveto
+151.70573 419.20333 151.59375 419.54057 151.59375 419.96765 curveto
+151.59375 422.44031 lineto
+150.87109 422.44031 lineto
+150.87109 418.06531 lineto
+151.59375 418.06531 lineto
+151.59375 418.745 lineto
+151.76562 418.48198 151.96745 418.28536 152.19922 418.15515 curveto
+152.43359 418.02495 152.70312 417.95984 153.00781 417.95984 curveto
+153.51041 417.95984 153.89062 418.11609 154.14844 418.42859 curveto
+154.40625 418.73849 154.53515 419.19552 154.53516 419.79968 curveto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+156.6875 416.82312 moveto
+156.6875 418.06531 lineto
+158.16797 418.06531 lineto
+158.16797 418.6239 lineto
+156.6875 418.6239 lineto
+156.6875 420.9989 lineto
+156.6875 421.35567 156.73568 421.58484 156.83203 421.6864 curveto
+156.93099 421.78796 157.13021 421.83875 157.42969 421.83875 curveto
+158.16797 421.83875 lineto
+158.16797 422.44031 lineto
+157.42969 422.44031 lineto
+156.875 422.44031 156.49219 422.33744 156.28125 422.13171 curveto
+156.07031 421.92338 155.96484 421.54578 155.96484 420.9989 curveto
+155.96484 418.6239 lineto
+155.4375 418.6239 lineto
+155.4375 418.06531 lineto
+155.96484 418.06531 lineto
+155.96484 416.82312 lineto
+156.6875 416.82312 lineto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+162.85938 420.07312 moveto
+162.85938 420.42468 lineto
+159.55469 420.42468 lineto
+159.58594 420.91948 159.73437 421.29708 160 421.5575 curveto
+160.26823 421.81531 160.64062 421.94421 161.11719 421.94421 curveto
+161.39323 421.94421 161.66015 421.91036 161.91797 421.84265 curveto
+162.17838 421.77494 162.43619 421.67338 162.69141 421.53796 curveto
+162.69141 422.21765 lineto
+162.43359 422.32703 162.16927 422.41036 161.89844 422.46765 curveto
+161.6276 422.52494 161.35286 422.55359 161.07422 422.55359 curveto
+160.3763 422.55359 159.82292 422.35046 159.41406 421.94421 curveto
+159.00781 421.53796 158.80469 420.98849 158.80469 420.29578 curveto
+158.80469 419.57963 158.9974 419.01193 159.38281 418.59265 curveto
+159.77083 418.17078 160.29297 417.95984 160.94922 417.95984 curveto
+161.53776 417.95984 162.0026 418.14995 162.34375 418.53015 curveto
+162.6875 418.90776 162.85937 419.42208 162.85938 420.07312 curveto
+162.14062 419.86218 moveto
+162.13541 419.46896 162.02474 419.15515 161.80859 418.92078 curveto
+161.59505 418.68641 161.31119 418.56922 160.95703 418.56921 curveto
+160.55599 418.56922 160.23437 418.6825 159.99219 418.90906 curveto
+159.7526 419.13562 159.61458 419.45463 159.57812 419.86609 curveto
+162.14062 419.86218 lineto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+166.57422 418.73718 moveto
+166.49349 418.69031 166.40494 418.65646 166.30859 418.63562 curveto
+166.21484 418.61219 166.11067 418.60047 165.99609 418.60046 curveto
+165.58984 418.60047 165.27734 418.73328 165.05859 418.9989 curveto
+164.84245 419.26193 164.73437 419.64083 164.73438 420.13562 curveto
+164.73438 422.44031 lineto
+164.01172 422.44031 lineto
+164.01172 418.06531 lineto
+164.73438 418.06531 lineto
+164.73438 418.745 lineto
+164.88542 418.47937 165.08203 418.28276 165.32422 418.15515 curveto
+165.5664 418.02495 165.86067 417.95984 166.20703 417.95984 curveto
+166.25651 417.95984 166.31119 417.96375 166.37109 417.97156 curveto
+166.43099 417.97677 166.49739 417.98588 166.57031 417.9989 curveto
+166.57422 418.73718 lineto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+170.90625 420.07312 moveto
+170.90625 420.42468 lineto
+167.60156 420.42468 lineto
+167.63281 420.91948 167.78125 421.29708 168.04688 421.5575 curveto
+168.3151 421.81531 168.6875 421.94421 169.16406 421.94421 curveto
+169.4401 421.94421 169.70703 421.91036 169.96484 421.84265 curveto
+170.22526 421.77494 170.48307 421.67338 170.73828 421.53796 curveto
+170.73828 422.21765 lineto
+170.48046 422.32703 170.21614 422.41036 169.94531 422.46765 curveto
+169.67448 422.52494 169.39974 422.55359 169.12109 422.55359 curveto
+168.42318 422.55359 167.86979 422.35046 167.46094 421.94421 curveto
+167.05469 421.53796 166.85156 420.98849 166.85156 420.29578 curveto
+166.85156 419.57963 167.04427 419.01193 167.42969 418.59265 curveto
+167.81771 418.17078 168.33984 417.95984 168.99609 417.95984 curveto
+169.58463 417.95984 170.04948 418.14995 170.39062 418.53015 curveto
+170.73437 418.90776 170.90625 419.42208 170.90625 420.07312 curveto
+170.1875 419.86218 moveto
+170.18229 419.46896 170.07161 419.15515 169.85547 418.92078 curveto
+169.64192 418.68641 169.35807 418.56922 169.00391 418.56921 curveto
+168.60286 418.56922 168.28125 418.6825 168.03906 418.90906 curveto
+167.79948 419.13562 167.66146 419.45463 167.625 419.86609 curveto
+170.1875 419.86218 lineto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+174.96484 418.72937 moveto
+174.96484 416.36218 lineto
+175.68359 416.36218 lineto
+175.68359 422.44031 lineto
+174.96484 422.44031 lineto
+174.96484 421.78406 lineto
+174.8138 422.04447 174.62239 422.23848 174.39062 422.36609 curveto
+174.16146 422.49109 173.88541 422.55359 173.5625 422.55359 curveto
+173.03385 422.55359 172.60286 422.34265 172.26953 421.92078 curveto
+171.9388 421.4989 171.77344 420.94422 171.77344 420.25671 curveto
+171.77344 419.56922 171.9388 419.01453 172.26953 418.59265 curveto
+172.60286 418.17078 173.03385 417.95984 173.5625 417.95984 curveto
+173.88541 417.95984 174.16146 418.02365 174.39062 418.15125 curveto
+174.62239 418.27625 174.8138 418.46896 174.96484 418.72937 curveto
+172.51562 420.25671 moveto
+172.51562 420.78536 172.6237 421.20073 172.83984 421.50281 curveto
+173.05859 421.80229 173.35807 421.95203 173.73828 421.95203 curveto
+174.11849 421.95203 174.41797 421.80229 174.63672 421.50281 curveto
+174.85547 421.20073 174.96484 420.78536 174.96484 420.25671 curveto
+174.96484 419.72807 174.85547 419.31401 174.63672 419.01453 curveto
+174.41797 418.71245 174.11849 418.56141 173.73828 418.5614 curveto
+173.35807 418.56141 173.05859 418.71245 172.83984 419.01453 curveto
+172.6237 419.31401 172.51562 419.72807 172.51562 420.25671 curveto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+180.40625 421.78406 moveto
+180.40625 424.10437 lineto
+179.68359 424.10437 lineto
+179.68359 418.06531 lineto
+180.40625 418.06531 lineto
+180.40625 418.72937 lineto
+180.55729 418.46896 180.74739 418.27625 180.97656 418.15125 curveto
+181.20833 418.02365 181.48437 417.95984 181.80469 417.95984 curveto
+182.33593 417.95984 182.76692 418.17078 183.09766 418.59265 curveto
+183.43099 419.01453 183.59765 419.56922 183.59766 420.25671 curveto
+183.59765 420.94422 183.43099 421.4989 183.09766 421.92078 curveto
+182.76692 422.34265 182.33593 422.55359 181.80469 422.55359 curveto
+181.48437 422.55359 181.20833 422.49109 180.97656 422.36609 curveto
+180.74739 422.23848 180.55729 422.04447 180.40625 421.78406 curveto
+182.85156 420.25671 moveto
+182.85156 419.72807 182.74218 419.31401 182.52344 419.01453 curveto
+182.30729 418.71245 182.00911 418.56141 181.62891 418.5614 curveto
+181.2487 418.56141 180.94922 418.71245 180.73047 419.01453 curveto
+180.51432 419.31401 180.40625 419.72807 180.40625 420.25671 curveto
+180.40625 420.78536 180.51432 421.20073 180.73047 421.50281 curveto
+180.94922 421.80229 181.2487 421.95203 181.62891 421.95203 curveto
+182.00911 421.95203 182.30729 421.80229 182.52344 421.50281 curveto
+182.74218 421.20073 182.85156 420.78536 182.85156 420.25671 curveto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+186.77734 420.24109 moveto
+186.19661 420.24109 185.79427 420.3075 185.57031 420.44031 curveto
+185.34635 420.57312 185.23437 420.79968 185.23438 421.12 curveto
+185.23437 421.3752 185.31771 421.57833 185.48438 421.72937 curveto
+185.65364 421.87781 185.88281 421.95203 186.17188 421.95203 curveto
+186.57031 421.95203 186.88932 421.8114 187.12891 421.53015 curveto
+187.37109 421.2463 187.49218 420.87 187.49219 420.40125 curveto
+187.49219 420.24109 lineto
+186.77734 420.24109 lineto
+188.21094 419.94421 moveto
+188.21094 422.44031 lineto
+187.49219 422.44031 lineto
+187.49219 421.77625 lineto
+187.32812 422.04187 187.12369 422.23848 186.87891 422.36609 curveto
+186.63411 422.49109 186.33463 422.55359 185.98047 422.55359 curveto
+185.53255 422.55359 185.17578 422.42859 184.91016 422.17859 curveto
+184.64713 421.92599 184.51562 421.58875 184.51562 421.16687 curveto
+184.51562 420.67468 184.67969 420.30359 185.00781 420.05359 curveto
+185.33854 419.80359 185.83073 419.67859 186.48438 419.67859 curveto
+187.49219 419.67859 lineto
+187.49219 419.60828 lineto
+187.49218 419.27755 187.38281 419.02234 187.16406 418.84265 curveto
+186.94791 418.66036 186.64323 418.56922 186.25 418.56921 curveto
+186 418.56922 185.75651 418.59917 185.51953 418.65906 curveto
+185.28255 418.71896 185.05469 418.8088 184.83594 418.92859 curveto
+184.83594 418.26453 lineto
+185.09896 418.16297 185.35417 418.08745 185.60156 418.03796 curveto
+185.84896 417.98588 186.08984 417.95984 186.32422 417.95984 curveto
+186.95703 417.95984 187.42968 418.12391 187.74219 418.45203 curveto
+188.05468 418.78016 188.21093 419.27755 188.21094 419.94421 curveto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+192.23047 418.73718 moveto
+192.14974 418.69031 192.06119 418.65646 191.96484 418.63562 curveto
+191.87109 418.61219 191.76692 418.60047 191.65234 418.60046 curveto
+191.24609 418.60047 190.93359 418.73328 190.71484 418.9989 curveto
+190.4987 419.26193 190.39062 419.64083 190.39062 420.13562 curveto
+190.39062 422.44031 lineto
+189.66797 422.44031 lineto
+189.66797 418.06531 lineto
+190.39062 418.06531 lineto
+190.39062 418.745 lineto
+190.54167 418.47937 190.73828 418.28276 190.98047 418.15515 curveto
+191.22265 418.02495 191.51692 417.95984 191.86328 417.95984 curveto
+191.91276 417.95984 191.96744 417.96375 192.02734 417.97156 curveto
+192.08724 417.97677 192.15364 417.98588 192.22656 417.9989 curveto
+192.23047 418.73718 lineto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+194.98047 420.24109 moveto
+194.39974 420.24109 193.99739 420.3075 193.77344 420.44031 curveto
+193.54948 420.57312 193.4375 420.79968 193.4375 421.12 curveto
+193.4375 421.3752 193.52083 421.57833 193.6875 421.72937 curveto
+193.85677 421.87781 194.08594 421.95203 194.375 421.95203 curveto
+194.77343 421.95203 195.09245 421.8114 195.33203 421.53015 curveto
+195.57422 421.2463 195.69531 420.87 195.69531 420.40125 curveto
+195.69531 420.24109 lineto
+194.98047 420.24109 lineto
+196.41406 419.94421 moveto
+196.41406 422.44031 lineto
+195.69531 422.44031 lineto
+195.69531 421.77625 lineto
+195.53125 422.04187 195.32682 422.23848 195.08203 422.36609 curveto
+194.83724 422.49109 194.53776 422.55359 194.18359 422.55359 curveto
+193.73568 422.55359 193.37891 422.42859 193.11328 422.17859 curveto
+192.85026 421.92599 192.71875 421.58875 192.71875 421.16687 curveto
+192.71875 420.67468 192.88281 420.30359 193.21094 420.05359 curveto
+193.54167 419.80359 194.03385 419.67859 194.6875 419.67859 curveto
+195.69531 419.67859 lineto
+195.69531 419.60828 lineto
+195.69531 419.27755 195.58593 419.02234 195.36719 418.84265 curveto
+195.15104 418.66036 194.84635 418.56922 194.45312 418.56921 curveto
+194.20312 418.56922 193.95963 418.59917 193.72266 418.65906 curveto
+193.48568 418.71896 193.25781 418.8088 193.03906 418.92859 curveto
+193.03906 418.26453 lineto
+193.30208 418.16297 193.55729 418.08745 193.80469 418.03796 curveto
+194.05208 417.98588 194.29297 417.95984 194.52734 417.95984 curveto
+195.16015 417.95984 195.63281 418.12391 195.94531 418.45203 curveto
+196.25781 418.78016 196.41406 419.27755 196.41406 419.94421 curveto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+201.30469 418.90515 moveto
+201.48437 418.58224 201.69921 418.34396 201.94922 418.19031 curveto
+202.19921 418.03667 202.49348 417.95984 202.83203 417.95984 curveto
+203.28775 417.95984 203.63932 418.12 203.88672 418.44031 curveto
+204.13411 418.75802 204.25781 419.21114 204.25781 419.79968 curveto
+204.25781 422.44031 lineto
+203.53516 422.44031 lineto
+203.53516 419.82312 lineto
+203.53515 419.40385 203.46093 419.09265 203.3125 418.88953 curveto
+203.16406 418.68641 202.93749 418.58484 202.63281 418.58484 curveto
+202.26041 418.58484 201.96614 418.70854 201.75 418.95593 curveto
+201.53385 419.20333 201.42578 419.54057 201.42578 419.96765 curveto
+201.42578 422.44031 lineto
+200.70312 422.44031 lineto
+200.70312 419.82312 lineto
+200.70312 419.40125 200.6289 419.09005 200.48047 418.88953 curveto
+200.33203 418.68641 200.10286 418.58484 199.79297 418.58484 curveto
+199.42578 418.58484 199.13411 418.70984 198.91797 418.95984 curveto
+198.70182 419.20724 198.59375 419.54318 198.59375 419.96765 curveto
+198.59375 422.44031 lineto
+197.87109 422.44031 lineto
+197.87109 418.06531 lineto
+198.59375 418.06531 lineto
+198.59375 418.745 lineto
+198.75781 418.47677 198.95443 418.27885 199.18359 418.15125 curveto
+199.41276 418.02365 199.68489 417.95984 200 417.95984 curveto
+200.31771 417.95984 200.58724 418.04057 200.80859 418.20203 curveto
+201.03255 418.36349 201.19791 418.59786 201.30469 418.90515 curveto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+209.4375 420.07312 moveto
+209.4375 420.42468 lineto
+206.13281 420.42468 lineto
+206.16406 420.91948 206.3125 421.29708 206.57812 421.5575 curveto
+206.84635 421.81531 207.21875 421.94421 207.69531 421.94421 curveto
+207.97135 421.94421 208.23828 421.91036 208.49609 421.84265 curveto
+208.75651 421.77494 209.01432 421.67338 209.26953 421.53796 curveto
+209.26953 422.21765 lineto
+209.01171 422.32703 208.74739 422.41036 208.47656 422.46765 curveto
+208.20573 422.52494 207.93099 422.55359 207.65234 422.55359 curveto
+206.95443 422.55359 206.40104 422.35046 205.99219 421.94421 curveto
+205.58594 421.53796 205.38281 420.98849 205.38281 420.29578 curveto
+205.38281 419.57963 205.57552 419.01193 205.96094 418.59265 curveto
+206.34896 418.17078 206.87109 417.95984 207.52734 417.95984 curveto
+208.11588 417.95984 208.58073 418.14995 208.92188 418.53015 curveto
+209.26562 418.90776 209.4375 419.42208 209.4375 420.07312 curveto
+208.71875 419.86218 moveto
+208.71354 419.46896 208.60286 419.15515 208.38672 418.92078 curveto
+208.17317 418.68641 207.88932 418.56922 207.53516 418.56921 curveto
+207.13411 418.56922 206.8125 418.6825 206.57031 418.90906 curveto
+206.33073 419.13562 206.19271 419.45463 206.15625 419.86609 curveto
+208.71875 419.86218 lineto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+211.32812 416.82312 moveto
+211.32812 418.06531 lineto
+212.80859 418.06531 lineto
+212.80859 418.6239 lineto
+211.32812 418.6239 lineto
+211.32812 420.9989 lineto
+211.32812 421.35567 211.3763 421.58484 211.47266 421.6864 curveto
+211.57161 421.78796 211.77083 421.83875 212.07031 421.83875 curveto
+212.80859 421.83875 lineto
+212.80859 422.44031 lineto
+212.07031 422.44031 lineto
+211.51562 422.44031 211.13281 422.33744 210.92188 422.13171 curveto
+210.71094 421.92338 210.60547 421.54578 210.60547 420.9989 curveto
+210.60547 418.6239 lineto
+210.07812 418.6239 lineto
+210.07812 418.06531 lineto
+210.60547 418.06531 lineto
+210.60547 416.82312 lineto
+211.32812 416.82312 lineto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+217.5 420.07312 moveto
+217.5 420.42468 lineto
+214.19531 420.42468 lineto
+214.22656 420.91948 214.375 421.29708 214.64062 421.5575 curveto
+214.90885 421.81531 215.28125 421.94421 215.75781 421.94421 curveto
+216.03385 421.94421 216.30078 421.91036 216.55859 421.84265 curveto
+216.81901 421.77494 217.07682 421.67338 217.33203 421.53796 curveto
+217.33203 422.21765 lineto
+217.07421 422.32703 216.80989 422.41036 216.53906 422.46765 curveto
+216.26823 422.52494 215.99349 422.55359 215.71484 422.55359 curveto
+215.01693 422.55359 214.46354 422.35046 214.05469 421.94421 curveto
+213.64844 421.53796 213.44531 420.98849 213.44531 420.29578 curveto
+213.44531 419.57963 213.63802 419.01193 214.02344 418.59265 curveto
+214.41146 418.17078 214.93359 417.95984 215.58984 417.95984 curveto
+216.17838 417.95984 216.64323 418.14995 216.98438 418.53015 curveto
+217.32812 418.90776 217.5 419.42208 217.5 420.07312 curveto
+216.78125 419.86218 moveto
+216.77604 419.46896 216.66536 419.15515 216.44922 418.92078 curveto
+216.23567 418.68641 215.95182 418.56922 215.59766 418.56921 curveto
+215.19661 418.56922 214.875 418.6825 214.63281 418.90906 curveto
+214.39323 419.13562 214.25521 419.45463 214.21875 419.86609 curveto
+216.78125 419.86218 lineto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+221.21484 418.73718 moveto
+221.13411 418.69031 221.04557 418.65646 220.94922 418.63562 curveto
+220.85547 418.61219 220.7513 418.60047 220.63672 418.60046 curveto
+220.23047 418.60047 219.91797 418.73328 219.69922 418.9989 curveto
+219.48307 419.26193 219.375 419.64083 219.375 420.13562 curveto
+219.375 422.44031 lineto
+218.65234 422.44031 lineto
+218.65234 418.06531 lineto
+219.375 418.06531 lineto
+219.375 418.745 lineto
+219.52604 418.47937 219.72265 418.28276 219.96484 418.15515 curveto
+220.20703 418.02495 220.5013 417.95984 220.84766 417.95984 curveto
+220.89713 417.95984 220.95182 417.96375 221.01172 417.97156 curveto
+221.07161 417.97677 221.13802 417.98588 221.21094 417.9989 curveto
+221.21484 418.73718 lineto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+224.76562 418.19421 moveto
+224.76562 418.8739 lineto
+224.5625 418.76974 224.35156 418.69161 224.13281 418.63953 curveto
+223.91406 418.58745 223.6875 418.56141 223.45312 418.5614 curveto
+223.09635 418.56141 222.82812 418.61609 222.64844 418.72546 curveto
+222.47135 418.83484 222.38281 418.9989 222.38281 419.21765 curveto
+222.38281 419.38432 222.44661 419.51583 222.57422 419.61218 curveto
+222.70182 419.70594 222.95833 419.79578 223.34375 419.88171 curveto
+223.58984 419.9364 lineto
+224.10026 420.04578 224.46224 420.20073 224.67578 420.40125 curveto
+224.89192 420.59916 225 420.87651 225 421.23328 curveto
+225 421.63953 224.83854 421.96114 224.51562 422.19812 curveto
+224.19531 422.4351 223.7539 422.55359 223.19141 422.55359 curveto
+222.95703 422.55359 222.71224 422.53015 222.45703 422.48328 curveto
+222.20443 422.43901 221.9375 422.3713 221.65625 422.28015 curveto
+221.65625 421.53796 lineto
+221.92187 421.67599 222.18359 421.78015 222.44141 421.85046 curveto
+222.69922 421.91817 222.95443 421.95203 223.20703 421.95203 curveto
+223.54557 421.95203 223.80599 421.89474 223.98828 421.78015 curveto
+224.17057 421.66296 224.26172 421.4989 224.26172 421.28796 curveto
+224.26172 421.09265 224.19531 420.94291 224.0625 420.83875 curveto
+223.93229 420.73458 223.64453 420.63432 223.19922 420.53796 curveto
+222.94922 420.47937 lineto
+222.5039 420.38562 222.18229 420.24239 221.98438 420.04968 curveto
+221.78646 419.85437 221.6875 419.58745 221.6875 419.2489 curveto
+221.6875 418.83745 221.83333 418.51974 222.125 418.29578 curveto
+222.41667 418.07182 222.83073 417.95984 223.36719 417.95984 curveto
+223.63281 417.95984 223.88281 417.97937 224.11719 418.01843 curveto
+224.35156 418.0575 224.5677 418.11609 224.76562 418.19421 curveto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+168.20312 433.37976 moveto
+168.20312 434.21179 lineto
+167.9375 433.9644 167.65364 433.77951 167.35156 433.6571 curveto
+167.05208 433.53471 166.73307 433.47352 166.39453 433.47351 curveto
+165.72786 433.47352 165.21745 433.67794 164.86328 434.08679 curveto
+164.50911 434.49305 164.33203 435.08159 164.33203 435.85242 curveto
+164.33203 436.62065 164.50911 437.20919 164.86328 437.61804 curveto
+165.21745 438.02429 165.72786 438.22742 166.39453 438.22742 curveto
+166.73307 438.22742 167.05208 438.16622 167.35156 438.04382 curveto
+167.65364 437.92143 167.9375 437.73653 168.20312 437.48914 curveto
+168.20312 438.31335 lineto
+167.92708 438.50085 167.63411 438.64148 167.32422 438.73523 curveto
+167.01692 438.82898 166.6914 438.87585 166.34766 438.87585 curveto
+165.46484 438.87585 164.76953 438.60632 164.26172 438.06726 curveto
+163.75391 437.5256 163.5 436.78731 163.5 435.85242 curveto
+163.5 434.91492 163.75391 434.17664 164.26172 433.63757 curveto
+164.76953 433.09591 165.46484 432.82508 166.34766 432.82507 curveto
+166.69661 432.82508 167.02474 432.87195 167.33203 432.9657 curveto
+167.64192 433.05685 167.93229 433.19487 168.20312 433.37976 curveto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+169.42969 432.93054 moveto
+170.21875 432.93054 lineto
+170.21875 438.76257 lineto
+169.42969 438.76257 lineto
+169.42969 432.93054 lineto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+175.28516 433.12195 moveto
+175.28516 433.89148 lineto
+174.98567 433.74826 174.70312 433.64148 174.4375 433.57117 curveto
+174.17187 433.50086 173.91536 433.4657 173.66797 433.4657 curveto
+173.23828 433.4657 172.90625 433.54904 172.67188 433.7157 curveto
+172.4401 433.88237 172.32422 434.11935 172.32422 434.42664 curveto
+172.32422 434.68445 172.40104 434.87976 172.55469 435.01257 curveto
+172.71094 435.14279 173.00521 435.24825 173.4375 435.32898 curveto
+173.91406 435.42664 lineto
+174.5026 435.53862 174.93619 435.73653 175.21484 436.02039 curveto
+175.49609 436.30164 175.63671 436.67924 175.63672 437.1532 curveto
+175.63671 437.7183 175.44661 438.14669 175.06641 438.43835 curveto
+174.6888 438.73002 174.13411 438.87585 173.40234 438.87585 curveto
+173.1263 438.87585 172.83203 438.8446 172.51953 438.7821 curveto
+172.20963 438.7196 171.88802 438.62716 171.55469 438.50476 curveto
+171.55469 437.69226 lineto
+171.875 437.87195 172.1888 438.00737 172.49609 438.09851 curveto
+172.80338 438.18966 173.10547 438.23523 173.40234 438.23523 curveto
+173.85286 438.23523 174.20052 438.14669 174.44531 437.9696 curveto
+174.6901 437.79252 174.8125 437.53992 174.8125 437.21179 curveto
+174.8125 436.92534 174.72395 436.70138 174.54688 436.53992 curveto
+174.37239 436.37846 174.08463 436.25737 173.68359 436.17664 curveto
+173.20312 436.08289 lineto
+172.61458 435.9657 172.1888 435.78211 171.92578 435.5321 curveto
+171.66276 435.28211 171.53125 434.93445 171.53125 434.48914 curveto
+171.53125 433.97352 171.71224 433.56727 172.07422 433.27039 curveto
+172.4388 432.97352 172.9401 432.82508 173.57812 432.82507 curveto
+173.85156 432.82508 174.13021 432.84982 174.41406 432.89929 curveto
+174.69791 432.94878 174.98828 433.023 175.28516 433.12195 curveto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+180.47266 436.12195 moveto
+180.47266 438.76257 lineto
+179.75391 438.76257 lineto
+179.75391 436.14539 lineto
+179.7539 435.73133 179.67317 435.42143 179.51172 435.2157 curveto
+179.35026 435.00997 179.10807 434.90711 178.78516 434.9071 curveto
+178.39713 434.90711 178.09114 435.03081 177.86719 435.2782 curveto
+177.64323 435.5256 177.53125 435.86284 177.53125 436.28992 curveto
+177.53125 438.76257 lineto
+176.80859 438.76257 lineto
+176.80859 432.68445 lineto
+177.53125 432.68445 lineto
+177.53125 435.06726 lineto
+177.70312 434.80424 177.90495 434.60763 178.13672 434.47742 curveto
+178.37109 434.34721 178.64062 434.28211 178.94531 434.2821 curveto
+179.44791 434.28211 179.82812 434.43836 180.08594 434.75085 curveto
+180.34375 435.06075 180.47265 435.51778 180.47266 436.12195 curveto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+185.65625 436.39539 moveto
+185.65625 436.74695 lineto
+182.35156 436.74695 lineto
+182.38281 437.24174 182.53125 437.61935 182.79688 437.87976 curveto
+183.0651 438.13757 183.4375 438.26648 183.91406 438.26648 curveto
+184.1901 438.26648 184.45703 438.23263 184.71484 438.16492 curveto
+184.97526 438.09721 185.23307 437.99565 185.48828 437.86023 curveto
+185.48828 438.53992 lineto
+185.23046 438.64929 184.96614 438.73263 184.69531 438.78992 curveto
+184.42448 438.84721 184.14974 438.87585 183.87109 438.87585 curveto
+183.17318 438.87585 182.61979 438.67273 182.21094 438.26648 curveto
+181.80469 437.86023 181.60156 437.31075 181.60156 436.61804 curveto
+181.60156 435.9019 181.79427 435.33419 182.17969 434.91492 curveto
+182.5...
[truncated message content] |
|
From: <bh...@us...> - 2006-12-08 16:19:40
|
Revision: 347
http://svn.sourceforge.net/cishell/?rev=347&view=rev
Author: bh2
Date: 2006-12-08 08:19:32 -0800 (Fri, 08 Dec 2006)
Log Message:
-----------
Initial import.
Added Paths:
-----------
trunk/core/org.cishell.docs.intro/
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <hu...@us...> - 2006-12-07 20:32:37
|
Revision: 346
http://svn.sourceforge.net/cishell/?rev=346&view=rev
Author: huangb
Date: 2006-12-07 12:32:26 -0800 (Thu, 07 Dec 2006)
Log Message:
-----------
If the selected data is an in-memory JAVA object, some times, only one
converter can save the data to a file. In this case, the length of the
converters equals to 1. So the application should use this converter to
save the data to a temporary file directly and then bring the text editor.
Modified Paths:
--------------
trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/FileView.java
Modified: trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/FileView.java
===================================================================
--- trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/FileView.java 2006-12-07 16:45:38 UTC (rev 345)
+++ trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/FileView.java 2006-12-07 20:32:26 UTC (rev 346)
@@ -96,8 +96,15 @@
data[i].getData().getClass().getName(),
"Please install a plugin that will save the data type to a file");
}
+ else if (converters.length == 1){
+ //If length=1, use the unique path to save it directly
+ //and bring the text editor.
+ Data newData = converters[0].convert(data[i]);
+ copy((File)newData.getData(), tempFile);
+ lastSaveSuccessful = true;
+ }
else {
- if (!parentShell.isDisposed()) {
+ if (!parentShell.isDisposed()) {
DataViewer dataViewer = new DataViewer(parentShell, data[i], converters);
display.syncExec(dataViewer);
lastSaveSuccessful = dataViewer.isSaved;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <bea...@us...> - 2006-12-07 16:45:48
|
Revision: 345
http://svn.sourceforge.net/cishell/?rev=345&view=rev
Author: bearsfan
Date: 2006-12-07 08:45:38 -0800 (Thu, 07 Dec 2006)
Log Message:
-----------
Changed the plugin.xml so that the scheduler appears.
Modified Paths:
--------------
trunk/clients/gui/org.cishell.reference.gui.brand.cishell/plugin.xml
Modified: trunk/clients/gui/org.cishell.reference.gui.brand.cishell/plugin.xml
===================================================================
--- trunk/clients/gui/org.cishell.reference.gui.brand.cishell/plugin.xml 2006-12-05 20:52:38 UTC (rev 344)
+++ trunk/clients/gui/org.cishell.reference.gui.brand.cishell/plugin.xml 2006-12-07 16:45:38 UTC (rev 345)
@@ -53,6 +53,16 @@
closeable = "false"
visible="true"/>
</perspectiveExtension>
+
+ <perspectiveExtension targetID="org.cishell.reference.gui.workspace.Perspective">
+ <view id="org.cishell.reference.gui.scheduler.SchedulerView"
+ relative="org.cishell.reference.gui.log.LogView"
+ relationship="bottom"
+ ratio="1.00"
+ moveable = "true"
+ closeable = "true"
+ visible="true"/>
+ </perspectiveExtension>
</extension>
<extension point="org.eclipse.ui.startup">
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <hu...@us...> - 2006-12-05 20:52:42
|
Revision: 344
http://svn.sourceforge.net/cishell/?rev=344&view=rev
Author: huangb
Date: 2006-12-05 12:52:38 -0800 (Tue, 05 Dec 2006)
Log Message:
-----------
Changed executable runner to check for .bat file, and will execute
a batch file if an executable does not exists (for Windows).
Modified Paths:
--------------
trunk/templates/org.cishell.templates/src/org/cishell/templates/staticexecutable/StaticExecutableRunner.java
Modified: trunk/templates/org.cishell.templates/src/org/cishell/templates/staticexecutable/StaticExecutableRunner.java
===================================================================
--- trunk/templates/org.cishell.templates/src/org/cishell/templates/staticexecutable/StaticExecutableRunner.java 2006-12-04 22:10:24 UTC (rev 343)
+++ trunk/templates/org.cishell.templates/src/org/cishell/templates/staticexecutable/StaticExecutableRunner.java 2006-12-05 20:52:38 UTC (rev 344)
@@ -241,6 +241,13 @@
for (int i=0; i < cmdarray.length; i++) {
cmdarray[i] = substiteVars(cmdarray[i]);
}
+
+ //TODO: Expanded later to support .cmd and other extensions
+ if (!new File(algDir + cmdarray[0]).exists()) {
+ if (new File(algDir + cmdarray[0] + ".bat").exists()) {
+ cmdarray[0] = cmdarray[0]+".bat";
+ }
+ }
cmdarray[0] = algDir + cmdarray[0];
return cmdarray;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
Revision: 343
http://svn.sourceforge.net/cishell/?rev=343&view=rev
Author: bh2
Date: 2006-12-04 14:10:24 -0800 (Mon, 04 Dec 2006)
Log Message:
-----------
Fixed the reference guibuilder to make text fields be at least 100px wide.
Modified Paths:
--------------
trunk/clients/gui/org.cishell.reference.gui.guibuilder.swt/src/org/cishell/reference/gui/guibuilder/swt/builder/components/StringComponent.java
Modified: trunk/clients/gui/org.cishell.reference.gui.guibuilder.swt/src/org/cishell/reference/gui/guibuilder/swt/builder/components/StringComponent.java
===================================================================
--- trunk/clients/gui/org.cishell.reference.gui.guibuilder.swt/src/org/cishell/reference/gui/guibuilder/swt/builder/components/StringComponent.java 2006-11-30 18:19:10 UTC (rev 342)
+++ trunk/clients/gui/org.cishell.reference.gui.guibuilder.swt/src/org/cishell/reference/gui/guibuilder/swt/builder/components/StringComponent.java 2006-12-04 22:10:24 UTC (rev 343)
@@ -43,6 +43,7 @@
GridData gd = new GridData(SWT.FILL,SWT.CENTER,true,false);
gd.horizontalSpan = MAX_SPAN-1;
+ gd.minimumWidth = 100;
text.setLayoutData(gd);
text.addModifyListener(new ModifyListener() {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <bea...@us...> - 2006-11-30 18:19:24
|
Revision: 342
http://svn.sourceforge.net/cishell/?rev=342&view=rev
Author: bearsfan
Date: 2006-11-30 10:19:10 -0800 (Thu, 30 Nov 2006)
Log Message:
-----------
All of the viewable functions for the scheduler viewer are there. Still need help
with debugging, but checking it in to work on another bug.
Modified Paths:
--------------
trunk/clients/gui/org.cishell.reference.gui.scheduler/src/org/cishell/reference/gui/scheduler/SchedulerTableItem.java
trunk/clients/gui/org.cishell.reference.gui.scheduler/src/org/cishell/reference/gui/scheduler/SchedulerView.java
Modified: trunk/clients/gui/org.cishell.reference.gui.scheduler/src/org/cishell/reference/gui/scheduler/SchedulerTableItem.java
===================================================================
--- trunk/clients/gui/org.cishell.reference.gui.scheduler/src/org/cishell/reference/gui/scheduler/SchedulerTableItem.java 2006-11-28 14:54:23 UTC (rev 341)
+++ trunk/clients/gui/org.cishell.reference.gui.scheduler/src/org/cishell/reference/gui/scheduler/SchedulerTableItem.java 2006-11-30 18:19:10 UTC (rev 342)
@@ -20,6 +20,7 @@
private SchedulerService schedulerService;
private Algorithm algorithm;
private Calendar cal;
+ private String algorithmLabel;
private Table table;
private TableItem tableItem;
@@ -33,10 +34,10 @@
private String workBeingDone;
private boolean cancelRequested;
private boolean pauseRequested;
+ private boolean done;
private boolean isCancellable;
private boolean isPauseable;
- private boolean isWorkTrackable;
private AlgorithmProgressMonitor algorithmProgressMonitor;
@@ -48,11 +49,17 @@
this.table = table;
this.cancelRequested = false;
+ this.done = false;
this.isCancellable = false;
this.isPauseable = false;
- this.isWorkTrackable = false;
+ final ServiceReference serviceReference = schedulerService.getServiceReference(algorithm);
+ if (serviceReference != null) {
+ algorithmLabel = (String)serviceReference.getProperty(AlgorithmProperty.LABEL);
+ }
+
+
if (algorithm instanceof ProgressTrackable) {
algorithmProgressMonitor = new AlgorithmProgressMonitor();
((ProgressTrackable)algorithm).setProgressMonitor(algorithmProgressMonitor);
@@ -67,28 +74,71 @@
pauseRequested = request;
}
- public void createTableEntry() {
- final ServiceReference serviceReference = schedulerService.getServiceReference(algorithm);
- if (serviceReference != null) {
- final String label = (String)serviceReference.getProperty(AlgorithmProperty.LABEL);
-
+ public void initTableEntry(final int tblNdx) {
+ done = false;
+ guiRun(new Runnable() {
+ public void run() {
+ drawTableEntry(tblNdx, uncheckedImage, 0);
+ }
+ });
+ }
+
+ public void finishTableEntry(final int tblNdx) {
+ done = true;
+ if (!tableItem.isDisposed()) {
guiRun(new Runnable() {
public void run() {
- tableItem = new TableItem(table, SWT.NONE);
- tableItem.setImage(SchedulerView.COMPLETED_COLUMN, uncheckedImage);
- tableItem.setText(SchedulerView.ALGORITHM_COLUMN, label);
- setCalendar();
-
- //progressBar = new ProgressBar(table, SWT.INDETERMINATE);
- progressBar = new ProgressBar(table, SWT.NONE);
- tableEditor = new TableEditor(table);
- tableEditor.grabHorizontal = tableEditor.grabVertical = true;
- tableEditor.setEditor(progressBar, tableItem, SchedulerView.PERCENT_COLUMN);
+ int currentTblNdx;
+ if (tblNdx == -1) {
+ currentTblNdx = table.indexOf(tableItem);
+ }
+ else {
+ currentTblNdx = tblNdx;
+ }
+ tableItem.dispose();
+ progressBar.dispose();
+ progressBar = new ProgressBar(table, SWT.NONE);
+ drawTableEntry(currentTblNdx, checkedImage, progressBar
+ .getMaximum());
}
});
}
}
+ public void moveTableEntry(final int tblNdx) {
+ guiRun(new Runnable() {
+ public void run() {
+ Image image = tableItem.getImage(SchedulerView.COMPLETED_COLUMN);
+ int progressSelection = progressBar.getSelection();
+ drawTableEntry(tblNdx, image, progressSelection);
+ }
+ });
+ }
+
+ private void drawTableEntry(final int tblNdx, final Image image, final int progressBarStatus) {
+ guiRun(new Runnable() {
+ public void run() {
+ if (tableItem != null) {
+ tableItem.dispose();
+ }
+ tableItem = new TableItem(table, SWT.NONE, tblNdx);
+ tableItem.setImage(SchedulerView.COMPLETED_COLUMN, image);
+ tableItem.setText(SchedulerView.ALGORITHM_COLUMN, algorithmLabel);
+ setCalendar();
+
+ if (progressBar == null) {
+ progressBar = new ProgressBar(table, SWT.NONE);
+ }
+ progressBar.setSelection(progressBarStatus);
+ tableEditor = new TableEditor(table);
+ tableEditor.grabHorizontal = tableEditor.grabVertical = true;
+ tableEditor.setEditor(progressBar, tableItem,
+ SchedulerView.PERCENT_COLUMN);
+ }
+ });
+ }
+
+
private void createIndeterminateProgressBar() {
if (!tableItem.isDisposed()) {
guiRun(new Runnable() {
@@ -131,35 +181,11 @@
this.cal = cal;
setCalendar();
}
-
- public void finishTableEntry() {
- if (!tableItem.isDisposed()) {
- guiRun(new Runnable() {
- public void run() {
- tableItem.setImage(SchedulerView.COMPLETED_COLUMN,
- checkedImage);
-
- progressBar.dispose();
- progressBar = new ProgressBar(table, SWT.NONE);
- progressBar.setSelection(progressBar.getMaximum());
- tableEditor = new TableEditor(table);
- tableEditor.grabHorizontal = tableEditor.grabVertical = true;
- tableEditor.setEditor(progressBar, tableItem,
- SchedulerView.PERCENT_COLUMN);
- }
- });
- }
+
+ public void errorTableEntry(int tblNdx) {
+ drawTableEntry(tblNdx, errorImage, progressBar.getSelection());
}
- public void errorTableEntry() {
- guiRun(new Runnable() {
- public void run() {
- tableItem.setImage(SchedulerView.COMPLETED_COLUMN, errorImage);
- }
- });
- finishTableEntry();
- }
-
public void refresh() {
guiRun(new Runnable() {
public void run() {
@@ -249,7 +275,26 @@
public boolean isWorkTrackable() {
return isWorkTrackable();
}
-
+
+ public boolean isPaused() {
+ if (algorithmProgressMonitor.isPaused()) {
+ return false;
+ }
+ else {
+ return true;
+ }
+ }
+
+ public boolean isRunning() {
+ if (cancelRequested || done) {
+ return false;
+ }
+ return true;
+ }
+
+ public boolean isDone() {
+ return done;
+ }
private class AlgorithmProgressMonitor implements ProgressMonitor {
private int totalWorkUnits;
@@ -259,7 +304,7 @@
}
public void done() {
- finishTableEntry();
+ finishTableEntry(-1);
}
public boolean isCanceled() {
@@ -275,10 +320,11 @@
}
public void setPaused(boolean value) {
- pauseRequested = value;
+ pauseRequested = value;
}
public void start(int capabilities, int totalWorkUnits) {
+
if ((capabilities & ProgressMonitor.CANCELLABLE) > 0){
isCancellable = true;
}
@@ -286,7 +332,6 @@
isPauseable = true;
}
if ((capabilities & ProgressMonitor.WORK_TRACKABLE) > 0){
- isWorkTrackable = true;
guiRun(new Runnable() {
public void run() {
progressBar.dispose();
Modified: trunk/clients/gui/org.cishell.reference.gui.scheduler/src/org/cishell/reference/gui/scheduler/SchedulerView.java
===================================================================
--- trunk/clients/gui/org.cishell.reference.gui.scheduler/src/org/cishell/reference/gui/scheduler/SchedulerView.java 2006-11-28 14:54:23 UTC (rev 341)
+++ trunk/clients/gui/org.cishell.reference.gui.scheduler/src/org/cishell/reference/gui/scheduler/SchedulerView.java 2006-11-30 18:19:10 UTC (rev 342)
@@ -28,13 +28,21 @@
import org.cishell.framework.algorithm.ProgressTrackable;
import org.cishell.framework.data.Data;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseMoveListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Cursor;
import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
@@ -60,7 +68,7 @@
private Map tableItemToAlgorithmMap;
private List algorithmDoneList;
- //private static Composite parent;
+ private static Composite parent;
//private Button scheduleButton;
private Button removeButton;
private Button removeAutomatically;
@@ -108,7 +116,7 @@
* @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
*/
public void createPartControl(Composite parent) {
- //this.parent = parent;
+ this.parent = parent;
Composite control = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
@@ -173,6 +181,7 @@
removeAllCompleted.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
removeCompleted();
+ refresh();
}
});
@@ -216,10 +225,7 @@
" queued items can be moved without rescheduling.");
up.setEnabled(false);
up.setImage(upImage);
-
- /*
up.addSelectionListener(new UpButtonListener());
- */
down = new Button(upAndDown, SWT.PUSH);
down.setToolTipText(
@@ -227,14 +233,12 @@
" queued items can be moved without rescheduling.");
down.setEnabled(false);
down.setImage(downImage);
- /*
down.addSelectionListener(new DownButtonListener());
- */
// Create the table
createTable(tableComposite);
- table.addSelectionListener(new ContextMenuListener());
+ table.addSelectionListener(new TableListener());
//table.addMouseListener(new ContextMenuListener());
@@ -282,45 +286,56 @@
public void algorithmError(Algorithm algorithm, Throwable error) {
SchedulerTableItem schedulerTableItem = (SchedulerTableItem)algorithmToGuiItemMap.get(algorithm);
- schedulerTableItem.errorTableEntry();
+ schedulerTableItem.errorTableEntry(table.indexOf(schedulerTableItem.getTableItem()));
+ refresh();
}
public void algorithmFinished(Algorithm algorithm, Data[] createdData) {
SchedulerTableItem schedulerTableItem = (SchedulerTableItem)algorithmToGuiItemMap.get(algorithm);
if (schedulerTableItem != null) {
- schedulerTableItem.finishTableEntry();
+ TableItem tableItem = schedulerTableItem.getTableItem();
+ tableItemToAlgorithmMap.remove(tableItem);
+
+ schedulerTableItem.finishTableEntry(-1);
if (autoRemove) {
schedulerTableItem.remove();
algorithmToGuiItemMap.remove(algorithm);
} else {
+ tableItem = schedulerTableItem.getTableItem();
+ tableItemToAlgorithmMap.put(tableItem, algorithm);
algorithmDoneList.add(algorithm);
}
}
+ refresh();
}
public void algorithmRescheduled(Algorithm algorithm, Calendar time) {
SchedulerTableItem schedulerTableItem = (SchedulerTableItem)algorithmToGuiItemMap.get(algorithm);
schedulerTableItem.reschedule(time);
-
+ refresh();
}
public void algorithmScheduled(Algorithm algorithm, Calendar cal) {
SchedulerTableItem schedulerTableItem = new SchedulerTableItem(schedulerService, algorithm, cal, table);
- schedulerTableItem.createTableEntry();
+ schedulerTableItem.initTableEntry(0);
algorithmToGuiItemMap.put(algorithm, schedulerTableItem);
TableItem tableItem = schedulerTableItem.getTableItem();
tableItemToAlgorithmMap.put(tableItem, algorithm);
+
+ refresh();
}
public void algorithmStarted(Algorithm algorithm) {
SchedulerTableItem schedulerTableItem = (SchedulerTableItem)algorithmToGuiItemMap.get(algorithm);
schedulerTableItem.algorithmStarted();
+ refresh();
}
public void algorithmUnscheduled(Algorithm algorithm) {
SchedulerTableItem schedulerTableItem = (SchedulerTableItem)algorithmToGuiItemMap.get(algorithm);
schedulerTableItem.remove();
+ refresh();
}
public void schedulerCleared() {
@@ -330,6 +345,7 @@
}
algorithmToGuiItemMap.clear();
tableItemToAlgorithmMap.clear();
+ refresh();
}
public void schedulerRunStateChanged(boolean isRunning) {
@@ -340,6 +356,7 @@
else {
algorithmStateButton.setImage(playImage);
}
+ refresh();
}
/*
@@ -395,18 +412,19 @@
// });
//
// //key listener to allow you to remove items with the delete key
-// table.addKeyListener(new KeyAdapter() {
-// public void keyReleased(KeyEvent e) {
-// if (e.keyCode == SWT.DEL) {
-// removeSelection();
-// }
-// }
-// });
-//
-// //listener for dragging of items up and down in the running queue
-// ItemDragListener dragListener = new ItemDragListener();
-// table.addMouseMoveListener(dragListener);
-// table.addMouseListener(dragListener);
+ table.addKeyListener(new KeyAdapter() {
+ public void keyReleased(KeyEvent e) {
+ if (e.keyCode == SWT.DEL) {
+ removeSelection();
+ refresh();
+ }
+ }
+ });
+
+ //listener for dragging of items up and down in the running queue
+ ItemDragListener dragListener = new ItemDragListener();
+ table.addMouseMoveListener(dragListener);
+ table.addMouseListener(dragListener);
}
private void removeSelection() {
@@ -443,11 +461,12 @@
algorithmDoneList.clear();
}
- private void refresh() {
+ private void refresh() {
for (Iterator i = algorithmToGuiItemMap.values().iterator(); i.hasNext();) {
SchedulerTableItem schedulerTableItem = (SchedulerTableItem)i.next();
schedulerTableItem.refresh();
}
+ refreshUpAndDownButtons();
}
private boolean algorithmIsProgressTrackable(Algorithm algorithm) {
@@ -464,27 +483,106 @@
private void setEnabledMenuItems(Algorithm algorithm) {
SchedulerTableItem schedulerTableItem = (SchedulerTableItem)algorithmToGuiItemMap.get(algorithm);
- MenuItem menuItem = menu.getItem(CANCEL_INDEX);
- menuItem.setEnabled(schedulerTableItem.isCancellable());
+ if (!schedulerTableItem.isRunning()) {
+ for (int i = 0; i < menu.getItemCount(); ++i) {
+ MenuItem menuItem = menu.getItem(i);
+ menuItem.setEnabled(false);
+ }
+ }
+ else {
+ MenuItem menuItem = menu.getItem(CANCEL_INDEX);
+ menuItem.setEnabled(schedulerTableItem.isCancellable());
- menuItem = menu.getItem(PAUSE_INDEX);
- menuItem.setEnabled(schedulerTableItem.isPauseable());
- menuItem = menu.getItem(START_INDEX);
- menuItem.setEnabled(schedulerTableItem.isPauseable());
+ if (schedulerTableItem.isPaused()) {
+ menuItem = menu.getItem(PAUSE_INDEX);
+ menuItem.setEnabled(schedulerTableItem.isPauseable());
+ menuItem = menu.getItem(START_INDEX);
+ menuItem.setEnabled(false);
+ } else {
+ menuItem = menu.getItem(PAUSE_INDEX);
+ menuItem.setEnabled(false);
+ menuItem = menu.getItem(START_INDEX);
+ menuItem.setEnabled(schedulerTableItem.isPauseable());
+ }
+ }
}
+
+ private void moveTableItems(int ndxToMove, int destNdx) {
+ TableItem item = table.getItem(ndxToMove);
+ if (item != null) {
+ Algorithm algorithm = (Algorithm) tableItemToAlgorithmMap
+ .get(item);
+ tableItemToAlgorithmMap.remove(item);
- private class ContextMenuListener extends SelectionAdapter {
+ SchedulerTableItem schedulerTableItem = (SchedulerTableItem) algorithmToGuiItemMap
+ .get(algorithm);
+ schedulerTableItem.moveTableEntry(destNdx);
+ table.setSelection(destNdx);
+
+ TableItem tableItem = schedulerTableItem.getTableItem();
+ tableItemToAlgorithmMap.put(tableItem, algorithm);
+
+ refresh();
+ }
+ }
+
+ private void refreshUpAndDownButtons() {
+ guiRun(new Runnable() {
+ public void run() {
+ if (table.getItemCount() > 1 && table.getSelectionCount() == 1) {
+ if (table.getSelectionIndex() > 0) {
+ up.setEnabled(true);
+ }
+ else {
+ up.setEnabled(false);
+ }
+ if (table.getSelectionIndex() < table.getItemCount()-1) {
+ down.setEnabled(true);
+ }
+ else {
+ down.setEnabled(false);
+ }
+ }
+ else {
+ up.setEnabled(false);
+ down.setEnabled(false);
+ }
+ }
+ });
+ }
+
+ private void guiRun(Runnable run) {
+ if (Thread.currentThread() == Display.getDefault().getThread()) {
+ run.run();
+ } else {
+ Display.getDefault().syncExec(run);
+ }
+ }
+
+
+ private class TableListener extends SelectionAdapter {
public void widgetSelected(SelectionEvent e) {
- TableItem item = table.getItem(table.getSelectionIndex());
- if (item != null) {
- Algorithm algorithm = (Algorithm)tableItemToAlgorithmMap.get(item);
+ TableItem[] items = table.getSelection();
+ for (int i = 0; i < items.length; ++i) {
+ TableItem item = items[i];
+ Algorithm algorithm = (Algorithm) tableItemToAlgorithmMap
+ .get(item);
if (algorithmIsProgressTrackable(algorithm)) {
+ removeButton.setEnabled(true);
setEnabledMenuItems(algorithm);
- }
- else {
+ } else {
+ SchedulerTableItem schedulerTableItem = (SchedulerTableItem) algorithmToGuiItemMap
+ .get(algorithm);
+ if (schedulerTableItem.isDone()) {
+ removeButton.setEnabled(true);
+ } else {
+ removeButton.setEnabled(false);
+ break;
+ }
setEnabledMenuItems(algorithm);
}
}
+ refresh();
}
}
@@ -498,6 +596,7 @@
ProgressMonitor monitor = ((ProgressTrackable)algorithm).getProgressMonitor();
if (monitor != null) {
monitor.setPaused(true);
+ setEnabledMenuItems(algorithm);
}
}
}
@@ -515,6 +614,7 @@
.getProgressMonitor();
if (monitor != null) {
monitor.setCanceled(true);
+ setEnabledMenuItems(algorithm);
}
}
}
@@ -533,9 +633,99 @@
.getProgressMonitor();
if (monitor != null) {
monitor.setPaused(false);
+ setEnabledMenuItems(algorithm);
}
}
}
}
}
+
+ private class UpButtonListener extends SelectionAdapter {
+ public void widgetSelected(SelectionEvent e) {
+ int tblNdx = table.getSelectionIndex();
+ if (tblNdx != -1) {
+ moveTableItems(tblNdx, tblNdx-1);
+//
+// TableItem item = table.getItem(tblNdx);
+// if (item != null && tblNdx > 0) {
+// Algorithm algorithm = (Algorithm) tableItemToAlgorithmMap
+// .get(item);
+// tableItemToAlgorithmMap.remove(item);
+// item.dispose();
+//
+// SchedulerTableItem schedulerTableItem = (SchedulerTableItem) algorithmToGuiItemMap
+// .get(algorithm);
+// schedulerTableItem.createTableEntry(tblNdx-1);
+// table.setSelection(tblNdx-1);
+//
+// TableItem tableItem = schedulerTableItem.getTableItem();
+// tableItemToAlgorithmMap.put(tableItem, algorithm);
+//
+// refresh();
+// }
+ }
+ }
+ }
+
+ private class DownButtonListener extends SelectionAdapter {
+ public void widgetSelected(SelectionEvent e) {
+ int tblNdx = table.getSelectionIndex();
+ if (tblNdx != -1) {
+ TableItem item = table.getItem(tblNdx);
+ if (item != null && tblNdx < table.getItemCount()-1) {
+ moveTableItems(tblNdx, tblNdx+1);
+ }
+ }
+ }
+ }
+
+ private class ItemDragListener extends MouseAdapter implements MouseMoveListener {
+ private boolean down = false;
+ private Algorithm movingAlgorithm;
+ private int movingIndex;
+ private int currentIndex;
+
+ //if the mouse is down (dragging), discover when it is dragged over
+ //a new table item and swap them if possible in the running queue
+ public void mouseMove(MouseEvent e) {
+ if (down && (movingAlgorithm != null)) {
+ SchedulerTableItem schedulerTableItem = (SchedulerTableItem)algorithmToGuiItemMap.get(movingAlgorithm);
+ TableItem movingTableItem = schedulerTableItem.getTableItem();
+
+ TableItem currentItem = table.getItem(new Point(e.x, e.y));
+
+ if (currentItem == null || movingTableItem.equals(currentItem)) {
+ return;
+ }
+
+ movingIndex = table.indexOf(movingTableItem);
+ currentIndex = table.indexOf(currentItem);
+
+ moveTableItems(movingIndex, currentIndex);
+ }
+ }
+
+ //reset the selected item and set the flag that the mouse is down
+ public void mouseDown(MouseEvent e) {
+ if (e.button == 1) {
+ down = true;
+
+ TableItem item = table.getItem(new Point(e.x, e.y));
+ if(item == null) return;
+
+ movingAlgorithm = (Algorithm) tableItemToAlgorithmMap.get(item);
+ }
+ }
+
+ //unset the mouse down flag and clear the selected item
+ public void mouseUp(MouseEvent e) {
+ if (e.button == 1) {
+ down = false;
+ movingAlgorithm = null;
+
+ Cursor cursor = new Cursor(parent.getDisplay(), SWT.CURSOR_ARROW);
+ table.setCursor(cursor);
+ }
+ }
+ }
}
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <bh...@us...> - 2006-11-28 14:54:28
|
Revision: 341
http://svn.sourceforge.net/cishell/?rev=341&view=rev
Author: bh2
Date: 2006-11-28 06:54:23 -0800 (Tue, 28 Nov 2006)
Log Message:
-----------
Renamed scheduler gui's project name
Modified Paths:
--------------
trunk/clients/gui/org.cishell.reference.gui.scheduler/.project
Modified: trunk/clients/gui/org.cishell.reference.gui.scheduler/.project
===================================================================
--- trunk/clients/gui/org.cishell.reference.gui.scheduler/.project 2006-11-27 17:24:41 UTC (rev 340)
+++ trunk/clients/gui/org.cishell.reference.gui.scheduler/.project 2006-11-28 14:54:23 UTC (rev 341)
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
- <name>org.cishell.reference.gui.log</name>
+ <name>org.cishell.reference.gui.scheduler</name>
<comment></comment>
<projects>
</projects>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <bh...@us...> - 2006-11-27 17:24:48
|
Revision: 340
http://svn.sourceforge.net/cishell/?rev=340&view=rev
Author: bh2
Date: 2006-11-27 09:24:41 -0800 (Mon, 27 Nov 2006)
Log Message:
-----------
Bug fix for bug: https://nwb.slis.indiana.edu/wiki/?n=Nwbtool.SaveTextFile
Now saving files without a file:*->file-ext:* converter can be saved correctly.
Modified Paths:
--------------
trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/save/FileSaver.java
Modified: trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/save/FileSaver.java
===================================================================
--- trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/save/FileSaver.java 2006-11-21 22:31:51 UTC (rev 339)
+++ trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/save/FileSaver.java 2006-11-27 17:24:41 UTC (rev 340)
@@ -100,7 +100,11 @@
}
dialog.setFilterPath(currentDir.getPath());
- dialog.setFilterExtensions(new String[]{"*." + ext});
+
+ if (ext != null && !ext.equals("*")) {
+ dialog.setFilterExtensions(new String[]{"*." + ext});
+ }
+
dialog.setText("Choose File");
String fileLabel = (String)data.getMetaData().get(DataProperty.LABEL);
@@ -119,7 +123,7 @@
if (!isSaveFileValid(selectedFile))
continue;
if (ext != null && ext.length() != 0)
- if (!selectedFile.getPath().endsWith(ext))
+ if (!selectedFile.getPath().endsWith(ext) && !ext.equals("*"))
selectedFile = new File(selectedFile.getPath()+'.'+ ext);
Data newData = converter.convert(data);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <bea...@us...> - 2006-11-21 22:32:31
|
Revision: 338
http://svn.sourceforge.net/cishell/?rev=338&view=rev
Author: bearsfan
Date: 2006-11-21 14:30:48 -0800 (Tue, 21 Nov 2006)
Log Message:
-----------
Initial import.
Added Paths:
-----------
trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <bea...@us...> - 2006-11-21 22:32:30
|
Revision: 339
http://svn.sourceforge.net/cishell/?rev=339&view=rev
Author: bearsfan
Date: 2006-11-21 14:31:51 -0800 (Tue, 21 Nov 2006)
Log Message:
-----------
Test plugin for process trackable algorithms.
Added Paths:
-----------
trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/.classpath
trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/.project
trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/.settings/
trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/.settings/org.eclipse.pde.core.prefs
trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/META-INF/
trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/META-INF/MANIFEST.MF
trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/OSGI-INF/
trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/OSGI-INF/algorithm.properties
trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/OSGI-INF/component.xml
trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/OSGI-INF/l10n/
trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/OSGI-INF/l10n/bundle_en.properties
trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/OSGI-INF/metatype/
trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/OSGI-INF/metatype/METADATA.XML
trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/build/
trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/build.properties
trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/src/
trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/src/org/
trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/src/org/cishell/
trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/src/org/cishell/tests/
trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/src/org/cishell/tests/ProgressTrackableAlgorithm/
trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/src/org/cishell/tests/ProgressTrackableAlgorithm/AlgorithmTest.java
trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/src/org/cishell/tests/ProgressTrackableAlgorithm/AlgorithmTestFactory.java
Added: trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/.classpath
===================================================================
--- trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/.classpath (rev 0)
+++ trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/.classpath 2006-11-21 22:31:51 UTC (rev 339)
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="output" path="build"/>
+</classpath>
Added: trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/.project
===================================================================
--- trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/.project (rev 0)
+++ trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/.project 2006-11-21 22:31:51 UTC (rev 339)
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.cishell.tests.ProgressTrackableAlgorithm</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
Added: trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/.settings/org.eclipse.pde.core.prefs
===================================================================
--- trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/.settings/org.eclipse.pde.core.prefs (rev 0)
+++ trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/.settings/org.eclipse.pde.core.prefs 2006-11-21 22:31:51 UTC (rev 339)
@@ -0,0 +1,4 @@
+#Thu Nov 16 12:05:17 EST 2006
+eclipse.preferences.version=1
+pluginProject.equinox=false
+pluginProject.extensions=false
Added: trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/META-INF/MANIFEST.MF
===================================================================
--- trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/META-INF/MANIFEST.MF (rev 0)
+++ trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/META-INF/MANIFEST.MF 2006-11-21 22:31:51 UTC (rev 339)
@@ -0,0 +1,17 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: My algorithm tester
+Bundle-SymbolicName: org.my.algorithm.test
+Bundle-Version: 0.0.1
+Bundle-ClassPath: .
+Bundle-Localization: plugin
+Import-Package: org.cishell.framework,
+ org.cishell.framework.algorithm,
+ org.cishell.framework.data,
+ org.osgi.framework;version="1.3.0",
+ org.osgi.service.component;version="1.0.0",
+ org.osgi.service.log;version="1.3.0",
+ org.osgi.service.metatype;version="1.1.0",
+ org.osgi.service.prefs;version="1.1.0"
+X-AutoStart: true
+Service-Component: OSGI-INF/component.xml
Added: trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/OSGI-INF/algorithm.properties
===================================================================
--- trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/OSGI-INF/algorithm.properties (rev 0)
+++ trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/OSGI-INF/algorithm.properties 2006-11-21 22:31:51 UTC (rev 339)
@@ -0,0 +1,7 @@
+menu_path=Test/algorithm
+label=Algorithm Tester
+description=This algorithm does tests for me not you
+in_data=null
+out_data=null
+service.pid=org.cishell.tests.ProgressTrackableAlgorithm.AlgorithmTest
+remoteable=false
Added: trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/OSGI-INF/component.xml
===================================================================
--- trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/OSGI-INF/component.xml (rev 0)
+++ trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/OSGI-INF/component.xml 2006-11-21 22:31:51 UTC (rev 339)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<component name="org.cishell.tests.ProgressTrackableAlgorithm.AlgorithmTest.component" immediate="false">
+ <implementation class="org.cishell.tests.ProgressTrackableAlgorithm.AlgorithmTestFactory"/>
+ <properties entry="OSGI-INF/algorithm.properties"/>
+ <reference name="LOG" interface="org.osgi.service.log.LogService"/>
+ <reference name="MTS" interface="org.osgi.service.metatype.MetaTypeService"/>
+
+ <service>
+ <provide interface=
+ "org.cishell.framework.algorithm.AlgorithmFactory"/>
+ </service>
+</component>
\ No newline at end of file
Added: trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/OSGI-INF/l10n/bundle_en.properties
===================================================================
--- trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/OSGI-INF/l10n/bundle_en.properties (rev 0)
+++ trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/OSGI-INF/l10n/bundle_en.properties 2006-11-21 22:31:51 UTC (rev 339)
@@ -0,0 +1,7 @@
+#Localization variables for OSGI-INF/metatatype/METADATA.XML
+#
+#Samples:
+#input=Input
+#desc=Enter an integer (that will be converted to a string)
+#name=Input->String
+#name_desc=Converts inputted integer to string
Added: trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/OSGI-INF/metatype/METADATA.XML
===================================================================
--- trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/OSGI-INF/metatype/METADATA.XML (rev 0)
+++ trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/OSGI-INF/metatype/METADATA.XML 2006-11-21 22:31:51 UTC (rev 339)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metatype:MetaData xmlns:metatype="http://www.osgi.org/xmlns/metatype/v1.0.0">
+ <OCD name="Algorithm Tester" id="org.my.algorithm.test.AlgorithmTest.OCD"
+ description="">
+ </OCD>
+ <Designate pid="org.my.algorithm.test.AlgorithmTest">
+ <Object ocdref="org.my.algorithm.test.AlgorithmTest.OCD" />
+ </Designate>
+</metatype:MetaData>
Added: trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/build.properties
===================================================================
--- trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/build.properties (rev 0)
+++ trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/build.properties 2006-11-21 22:31:51 UTC (rev 339)
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = build/
+bin.includes = META-INF/,\
+ .,\
+ OSGI-INF/
Added: trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/src/org/cishell/tests/ProgressTrackableAlgorithm/AlgorithmTest.java
===================================================================
--- trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/src/org/cishell/tests/ProgressTrackableAlgorithm/AlgorithmTest.java (rev 0)
+++ trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/src/org/cishell/tests/ProgressTrackableAlgorithm/AlgorithmTest.java 2006-11-21 22:31:51 UTC (rev 339)
@@ -0,0 +1,69 @@
+package org.cishell.tests.ProgressTrackableAlgorithm;
+
+import java.util.Dictionary;
+
+import org.cishell.framework.CIShellContext;
+import org.cishell.framework.algorithm.Algorithm;
+import org.cishell.framework.algorithm.ProgressMonitor;
+import org.cishell.framework.algorithm.ProgressTrackable;
+import org.cishell.framework.data.Data;
+
+public class AlgorithmTest implements Algorithm, ProgressTrackable {
+//public class AlgorithmTest implements Algorithm {
+ public static final int TOTAL_WORK_UNITS = 100;
+
+ Data[] data;
+ Dictionary parameters;
+ CIShellContext context;
+ ProgressMonitor monitor;
+
+ public AlgorithmTest(Data[] data, Dictionary parameters, CIShellContext context) {
+ this.data = data;
+ this.parameters = parameters;
+ this.context = context;
+ }
+
+ public Data[] execute() {
+ if (monitor != null) {
+ monitor.start(ProgressMonitor.CANCELLABLE |
+ ProgressMonitor.PAUSEABLE |
+ ProgressMonitor.WORK_TRACKABLE, TOTAL_WORK_UNITS);
+ for (int i = 0; i < TOTAL_WORK_UNITS; ++i) {
+ if (monitor.isCanceled()) {
+ break;
+ }
+ else if (monitor.isPaused()) {
+ --i;
+ }
+ monitor.worked(i);
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ monitor.done();
+ return null;
+ }
+ else {
+ for (int i = 0; i < TOTAL_WORK_UNITS; ++i) {
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ return null;
+ }
+ }
+
+ public ProgressMonitor getProgressMonitor() {
+ // TODO Auto-generated method stub
+ return this.monitor;
+ }
+
+ public void setProgressMonitor(ProgressMonitor monitor) {
+ this.monitor = monitor;
+ }
+}
\ No newline at end of file
Added: trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/src/org/cishell/tests/ProgressTrackableAlgorithm/AlgorithmTestFactory.java
===================================================================
--- trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/src/org/cishell/tests/ProgressTrackableAlgorithm/AlgorithmTestFactory.java (rev 0)
+++ trunk/examples/org.cishell.tests.ProgressTrackableAlgorithm/src/org/cishell/tests/ProgressTrackableAlgorithm/AlgorithmTestFactory.java 2006-11-21 22:31:51 UTC (rev 339)
@@ -0,0 +1,34 @@
+package org.cishell.tests.ProgressTrackableAlgorithm;
+
+import java.util.Dictionary;
+
+import org.cishell.framework.CIShellContext;
+import org.cishell.framework.algorithm.Algorithm;
+import org.cishell.framework.algorithm.AlgorithmFactory;
+import org.cishell.framework.data.Data;
+import org.osgi.service.component.ComponentContext;
+import org.osgi.service.metatype.MetaTypeProvider;
+import org.osgi.service.metatype.MetaTypeService;
+
+
+public class AlgorithmTestFactory implements AlgorithmFactory {
+ private MetaTypeProvider provider;
+
+ protected void activate(ComponentContext ctxt) {
+ //You may delete all references to metatype service if
+ //your algorithm does not require parameters and return
+ //null in the createParameters() method
+ MetaTypeService mts = (MetaTypeService)ctxt.locateService("MTS");
+ provider = mts.getMetaTypeInformation(ctxt.getBundleContext().getBundle());
+ }
+ protected void deactivate(ComponentContext ctxt) {
+ provider = null;
+ }
+
+ public Algorithm createAlgorithm(Data[] data, Dictionary parameters, CIShellContext context) {
+ return new AlgorithmTest(data, parameters, context);
+ }
+ public MetaTypeProvider createParameters(Data[] data) {
+ return provider;
+ }
+}
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <bea...@us...> - 2006-11-21 22:06:08
|
Revision: 337
http://svn.sourceforge.net/cishell/?rev=337&view=rev
Author: bearsfan
Date: 2006-11-21 14:06:07 -0800 (Tue, 21 Nov 2006)
Log Message:
-----------
Fixed a race condition for scheduling an algorithm
Modified Paths:
--------------
trunk/core/org.cishell.reference/src/org/cishell/reference/app/service/scheduler/SchedulerServiceImpl.java
Modified: trunk/core/org.cishell.reference/src/org/cishell/reference/app/service/scheduler/SchedulerServiceImpl.java
===================================================================
--- trunk/core/org.cishell.reference/src/org/cishell/reference/app/service/scheduler/SchedulerServiceImpl.java 2006-11-21 22:05:30 UTC (rev 336)
+++ trunk/core/org.cishell.reference/src/org/cishell/reference/app/service/scheduler/SchedulerServiceImpl.java 2006-11-21 22:06:07 UTC (rev 337)
@@ -411,12 +411,17 @@
"State was not one of allowable states: " + state);
}
}
- this._algMap.put(alg, new AlgorithmTask(alg, ref, time, this));
+ //this._algMap.put(alg, new AlgorithmTask(alg, ref, time, this));
+ new AlgorithmTask(alg, ref, time, this);
}
public synchronized final int getMaxSimultaneousAlgs() {
return this._maxSimultaneousAlgs;
}
+
+ public synchronized final void registerAlgorithmTask(Algorithm algorithm, AlgorithmTask algorithmTask) {
+ this._algMap.put(algorithm, algorithmTask);
+ }
/**
* @param alg
@@ -483,7 +488,7 @@
private volatile int _numRunning = 0;
- public void algorithmScheduled(Algorithm algorithm, Calendar time) {
+ public synchronized void algorithmScheduled(Algorithm algorithm, Calendar time) {
_schedulerListener.algorithmScheduled(algorithm, time);
}
@@ -492,32 +497,32 @@
_schedulerListener.algorithmStarted(algorithm);
}
- public void algorithmError(Algorithm algorithm, Throwable error) {
- purgeFinished();
+ public synchronized void algorithmError(Algorithm algorithm, Throwable error) {
_numRunning--;
_schedulerListener.algorithmError(algorithm, error);
+ purgeFinished();
}
- public void algorithmFinished(Algorithm algorithm, Data[] createdDM) {
- purgeFinished();
+ public synchronized void algorithmFinished(Algorithm algorithm, Data[] createdDM) {
_numRunning--;
_schedulerListener.algorithmFinished(algorithm, createdDM);
+ purgeFinished();
}
- public void algorithmRescheduled(Algorithm algorithm, Calendar time) {
+ public synchronized void algorithmRescheduled(Algorithm algorithm, Calendar time) {
_schedulerListener.algorithmRescheduled(algorithm, time);
}
- public void algorithmUnscheduled(Algorithm algorithm) {
+ public synchronized void algorithmUnscheduled(Algorithm algorithm) {
_schedulerListener.algorithmUnscheduled(algorithm);
}
- public void schedulerCleared() {
+ public synchronized void schedulerCleared() {
_schedulerListener.schedulerCleared();
}
- public void schedulerRunStateChanged(boolean isRunning) {
+ public synchronized void schedulerRunStateChanged(boolean isRunning) {
_schedulerListener.schedulerRunStateChanged(isRunning);
}
}
@@ -609,11 +614,13 @@
private SchedulerListener _schedulerListener;
public AlgorithmTask(Algorithm alg, ServiceReference ref, Calendar scheduledTime,
- SchedulerListener listener) {
+ //SchedulerListener listener) {
+ AlgSchedulerTask algSchedulerTask) {
_alg = alg;
_ref = ref;
_scheduledTime = scheduledTime;
- _schedulerListener = listener;
+ _schedulerListener = algSchedulerTask;
+ algSchedulerTask.registerAlgorithmTask(alg, this);
_init();
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <bea...@us...> - 2006-11-21 22:05:32
|
Revision: 336
http://svn.sourceforge.net/cishell/?rev=336&view=rev
Author: bearsfan
Date: 2006-11-21 14:05:30 -0800 (Tue, 21 Nov 2006)
Log Message:
-----------
Implemented the ProcessTrackable interface for the AlgorithmWrapper
Modified Paths:
--------------
trunk/clients/gui/org.cishell.reference.gui.menumanager/src/org/cishell/reference/gui/menumanager/menu/AlgorithmWrapper.java
Modified: trunk/clients/gui/org.cishell.reference.gui.menumanager/src/org/cishell/reference/gui/menumanager/menu/AlgorithmWrapper.java
===================================================================
--- trunk/clients/gui/org.cishell.reference.gui.menumanager/src/org/cishell/reference/gui/menumanager/menu/AlgorithmWrapper.java 2006-11-21 22:04:58 UTC (rev 335)
+++ trunk/clients/gui/org.cishell.reference.gui.menumanager/src/org/cishell/reference/gui/menumanager/menu/AlgorithmWrapper.java 2006-11-21 22:05:30 UTC (rev 336)
@@ -25,6 +25,8 @@
import org.cishell.framework.algorithm.Algorithm;
import org.cishell.framework.algorithm.AlgorithmFactory;
import org.cishell.framework.algorithm.AlgorithmProperty;
+import org.cishell.framework.algorithm.ProgressMonitor;
+import org.cishell.framework.algorithm.ProgressTrackable;
import org.cishell.framework.data.Data;
import org.cishell.framework.data.DataProperty;
import org.cishell.service.conversion.Converter;
@@ -38,7 +40,7 @@
import org.osgi.service.metatype.ObjectClassDefinition;
-public class AlgorithmWrapper implements Algorithm, AlgorithmProperty {
+public class AlgorithmWrapper implements Algorithm, AlgorithmProperty, ProgressTrackable {
protected ServiceReference ref;
protected BundleContext bContext;
protected CIShellContext ciContext;
@@ -48,6 +50,8 @@
protected Dictionary parameters;
protected Map idToLabelMap;
protected MetaTypeProvider provider;
+ protected ProgressMonitor progressMonitor;
+ protected Algorithm algorithm;
public AlgorithmWrapper(ServiceReference ref, BundleContext bContext,
CIShellContext ciContext, Data[] originalData, Data[] data,
@@ -62,6 +66,10 @@
this.parameters = parameters;
this.provider = provider;
this.idToLabelMap = new HashMap();
+ this.progressMonitor = null;
+
+ AlgorithmFactory factory = (AlgorithmFactory) bContext.getService(ref);
+ algorithm = factory.createAlgorithm(data, parameters, ciContext);
}
/**
@@ -75,14 +83,15 @@
converters[i] = null;
}
}
+
+ printParameters();
- AlgorithmFactory factory = (AlgorithmFactory) bContext.getService(ref);
- Algorithm alg = factory.createAlgorithm(data, parameters, ciContext);
+ if (progressMonitor != null && algorithm instanceof ProgressTrackable) {
+ ((ProgressTrackable)algorithm).setProgressMonitor(progressMonitor);
+ }
- printParameters();
+ Data[] outData = algorithm.execute();
- Data[] outData = alg.execute();
-
if (outData != null) {
DataManagerService dataManager = (DataManagerService)
bContext.getService(bContext.getServiceReference(
@@ -212,4 +221,17 @@
return log;
}
+
+ public ProgressMonitor getProgressMonitor() {
+ if (algorithm instanceof ProgressTrackable) {
+ return progressMonitor;
+ }
+ else {
+ return null;
+ }
+ }
+
+ public void setProgressMonitor(ProgressMonitor monitor) {
+ progressMonitor = monitor;
+ }
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <bea...@us...> - 2006-11-21 22:05:02
|
Revision: 335
http://svn.sourceforge.net/cishell/?rev=335&view=rev
Author: bearsfan
Date: 2006-11-21 14:04:58 -0800 (Tue, 21 Nov 2006)
Log Message:
-----------
Initial check in of scheduler viewer. Disabling the scheduler is not active. Grid is missing from the table. Start, pause, remove, and cancel are enabled.
Added Paths:
-----------
trunk/clients/gui/org.cishell.reference.gui.scheduler/.classpath
trunk/clients/gui/org.cishell.reference.gui.scheduler/.project
trunk/clients/gui/org.cishell.reference.gui.scheduler/META-INF/
trunk/clients/gui/org.cishell.reference.gui.scheduler/META-INF/MANIFEST.MF
trunk/clients/gui/org.cishell.reference.gui.scheduler/build.properties
trunk/clients/gui/org.cishell.reference.gui.scheduler/icons/
trunk/clients/gui/org.cishell.reference.gui.scheduler/icons/check.gif
trunk/clients/gui/org.cishell.reference.gui.scheduler/icons/down.gif
trunk/clients/gui/org.cishell.reference.gui.scheduler/icons/error.gif
trunk/clients/gui/org.cishell.reference.gui.scheduler/icons/log_icon.gif
trunk/clients/gui/org.cishell.reference.gui.scheduler/icons/pause.jpeg
trunk/clients/gui/org.cishell.reference.gui.scheduler/icons/play.jpeg
trunk/clients/gui/org.cishell.reference.gui.scheduler/icons/uncheck.gif
trunk/clients/gui/org.cishell.reference.gui.scheduler/icons/up.gif
trunk/clients/gui/org.cishell.reference.gui.scheduler/plugin.xml
trunk/clients/gui/org.cishell.reference.gui.scheduler/src/
trunk/clients/gui/org.cishell.reference.gui.scheduler/src/org/
trunk/clients/gui/org.cishell.reference.gui.scheduler/src/org/cishell/
trunk/clients/gui/org.cishell.reference.gui.scheduler/src/org/cishell/reference/
trunk/clients/gui/org.cishell.reference.gui.scheduler/src/org/cishell/reference/gui/
trunk/clients/gui/org.cishell.reference.gui.scheduler/src/org/cishell/reference/gui/scheduler/
trunk/clients/gui/org.cishell.reference.gui.scheduler/src/org/cishell/reference/gui/scheduler/Activator.java
trunk/clients/gui/org.cishell.reference.gui.scheduler/src/org/cishell/reference/gui/scheduler/SchedulerTableItem.java
trunk/clients/gui/org.cishell.reference.gui.scheduler/src/org/cishell/reference/gui/scheduler/SchedulerView.java
Added: trunk/clients/gui/org.cishell.reference.gui.scheduler/.classpath
===================================================================
--- trunk/clients/gui/org.cishell.reference.gui.scheduler/.classpath (rev 0)
+++ trunk/clients/gui/org.cishell.reference.gui.scheduler/.classpath 2006-11-21 22:04:58 UTC (rev 335)
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
Added: trunk/clients/gui/org.cishell.reference.gui.scheduler/.project
===================================================================
--- trunk/clients/gui/org.cishell.reference.gui.scheduler/.project (rev 0)
+++ trunk/clients/gui/org.cishell.reference.gui.scheduler/.project 2006-11-21 22:04:58 UTC (rev 335)
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.cishell.reference.gui.log</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
Added: trunk/clients/gui/org.cishell.reference.gui.scheduler/META-INF/MANIFEST.MF
===================================================================
--- trunk/clients/gui/org.cishell.reference.gui.scheduler/META-INF/MANIFEST.MF (rev 0)
+++ trunk/clients/gui/org.cishell.reference.gui.scheduler/META-INF/MANIFEST.MF 2006-11-21 22:04:58 UTC (rev 335)
@@ -0,0 +1,15 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Scheduler GUI Plug-in
+Bundle-SymbolicName: org.cishell.reference.gui.scheduler;singleton:=true
+Bundle-Version: 0.2.1
+Bundle-Activator: org.cishell.reference.gui.scheduler.Activator
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime
+Eclipse-LazyStart: true
+Import-Package: org.cishell.app.service.scheduler,
+ org.cishell.framework,
+ org.cishell.framework.algorithm,
+ org.cishell.framework.data
+Export-Package: org.cishell.reference.gui.scheduler
Added: trunk/clients/gui/org.cishell.reference.gui.scheduler/build.properties
===================================================================
--- trunk/clients/gui/org.cishell.reference.gui.scheduler/build.properties (rev 0)
+++ trunk/clients/gui/org.cishell.reference.gui.scheduler/build.properties 2006-11-21 22:04:58 UTC (rev 335)
@@ -0,0 +1,6 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ icons/,\
+ plugin.xml
Added: trunk/clients/gui/org.cishell.reference.gui.scheduler/icons/check.gif
===================================================================
(Binary files differ)
Property changes on: trunk/clients/gui/org.cishell.reference.gui.scheduler/icons/check.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/clients/gui/org.cishell.reference.gui.scheduler/icons/down.gif
===================================================================
(Binary files differ)
Property changes on: trunk/clients/gui/org.cishell.reference.gui.scheduler/icons/down.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/clients/gui/org.cishell.reference.gui.scheduler/icons/error.gif
===================================================================
(Binary files differ)
Property changes on: trunk/clients/gui/org.cishell.reference.gui.scheduler/icons/error.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/clients/gui/org.cishell.reference.gui.scheduler/icons/log_icon.gif
===================================================================
(Binary files differ)
Property changes on: trunk/clients/gui/org.cishell.reference.gui.scheduler/icons/log_icon.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/clients/gui/org.cishell.reference.gui.scheduler/icons/pause.jpeg
===================================================================
(Binary files differ)
Property changes on: trunk/clients/gui/org.cishell.reference.gui.scheduler/icons/pause.jpeg
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/clients/gui/org.cishell.reference.gui.scheduler/icons/play.jpeg
===================================================================
(Binary files differ)
Property changes on: trunk/clients/gui/org.cishell.reference.gui.scheduler/icons/play.jpeg
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/clients/gui/org.cishell.reference.gui.scheduler/icons/uncheck.gif
===================================================================
(Binary files differ)
Property changes on: trunk/clients/gui/org.cishell.reference.gui.scheduler/icons/uncheck.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/clients/gui/org.cishell.reference.gui.scheduler/icons/up.gif
===================================================================
(Binary files differ)
Property changes on: trunk/clients/gui/org.cishell.reference.gui.scheduler/icons/up.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/clients/gui/org.cishell.reference.gui.scheduler/plugin.xml
===================================================================
--- trunk/clients/gui/org.cishell.reference.gui.scheduler/plugin.xml (rev 0)
+++ trunk/clients/gui/org.cishell.reference.gui.scheduler/plugin.xml 2006-11-21 22:04:58 UTC (rev 335)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+ <extension
+ point="org.eclipse.ui.views">
+ <view
+ allowMultiple="false"
+ class="org.cishell.reference.gui.scheduler.SchedulerView"
+ icon="icons/log_icon.gif"
+ id="org.cishell.reference.gui.scheduler.SchedulerView"
+ name="Console"/>
+ </extension>
+</plugin>
Added: trunk/clients/gui/org.cishell.reference.gui.scheduler/src/org/cishell/reference/gui/scheduler/Activator.java
===================================================================
--- trunk/clients/gui/org.cishell.reference.gui.scheduler/src/org/cishell/reference/gui/scheduler/Activator.java (rev 0)
+++ trunk/clients/gui/org.cishell.reference.gui.scheduler/src/org/cishell/reference/gui/scheduler/Activator.java 2006-11-21 22:04:58 UTC (rev 335)
@@ -0,0 +1,64 @@
+package org.cishell.reference.gui.scheduler;
+
+import java.io.File;
+
+import org.cishell.app.service.scheduler.SchedulerService;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+ public static final String PLUGIN_ID = "org.cishell.reference.gui.scheduler";
+ private static Activator plugin;
+ private static BundleContext context;
+
+ public Activator() {
+ plugin = this;
+ }
+
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ Activator.context = context;
+ }
+
+ public void stop(BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ public static Activator getDefault() {
+ return plugin;
+ }
+
+ public static BundleContext getContext() {
+ return context;
+ }
+
+ protected static SchedulerService getSchedulerService() {
+ ServiceReference serviceReference = context.getServiceReference(SchedulerService.class.getName());
+ SchedulerService manager = null;
+
+ if (serviceReference != null) {
+ manager = (SchedulerService) context.getService(serviceReference);
+ }
+
+ return manager;
+ }
+
+ public static Image createImage(String name){
+ if(Platform.isRunning()){
+ return AbstractUIPlugin.
+ imageDescriptorFromPlugin(PLUGIN_ID,
+ File.separator + "icons" + File.separator + name).
+ createImage();
+ }
+ else {
+ return null;
+ }
+ }
+}
Added: trunk/clients/gui/org.cishell.reference.gui.scheduler/src/org/cishell/reference/gui/scheduler/SchedulerTableItem.java
===================================================================
--- trunk/clients/gui/org.cishell.reference.gui.scheduler/src/org/cishell/reference/gui/scheduler/SchedulerTableItem.java (rev 0)
+++ trunk/clients/gui/org.cishell.reference.gui.scheduler/src/org/cishell/reference/gui/scheduler/SchedulerTableItem.java 2006-11-21 22:04:58 UTC (rev 335)
@@ -0,0 +1,316 @@
+package org.cishell.reference.gui.scheduler;
+
+import java.util.Calendar;
+
+import org.cishell.app.service.scheduler.SchedulerService;
+import org.cishell.framework.algorithm.Algorithm;
+import org.cishell.framework.algorithm.AlgorithmProperty;
+import org.cishell.framework.algorithm.ProgressMonitor;
+import org.cishell.framework.algorithm.ProgressTrackable;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.TableEditor;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.ProgressBar;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableItem;
+import org.osgi.framework.ServiceReference;
+
+public class SchedulerTableItem {
+ private SchedulerService schedulerService;
+ private Algorithm algorithm;
+ private Calendar cal;
+
+ private Table table;
+ private TableItem tableItem;
+ private TableEditor tableEditor;
+ private ProgressBar progressBar;
+
+ private static Image checkedImage = Activator.createImage("check.gif");
+ private static Image uncheckedImage = Activator.createImage("uncheck.gif");
+ private static Image errorImage = Activator.createImage("error.gif");
+
+ private String workBeingDone;
+ private boolean cancelRequested;
+ private boolean pauseRequested;
+
+ private boolean isCancellable;
+ private boolean isPauseable;
+ private boolean isWorkTrackable;
+
+ private AlgorithmProgressMonitor algorithmProgressMonitor;
+
+ public SchedulerTableItem(SchedulerService schedulerService, Algorithm algorithm,
+ Calendar cal, Table table) {
+ this.schedulerService = schedulerService;
+ this.algorithm = algorithm;
+ this.cal = cal;
+ this.table = table;
+
+ this.cancelRequested = false;
+
+ this.isCancellable = false;
+ this.isPauseable = false;
+ this.isWorkTrackable = false;
+
+ if (algorithm instanceof ProgressTrackable) {
+ algorithmProgressMonitor = new AlgorithmProgressMonitor();
+ ((ProgressTrackable)algorithm).setProgressMonitor(algorithmProgressMonitor);
+ }
+ }
+
+ public void requestCancel(boolean request) {
+ cancelRequested = request;
+ }
+
+ public void requestPause(boolean request) {
+ pauseRequested = request;
+ }
+
+ public void createTableEntry() {
+ final ServiceReference serviceReference = schedulerService.getServiceReference(algorithm);
+ if (serviceReference != null) {
+ final String label = (String)serviceReference.getProperty(AlgorithmProperty.LABEL);
+
+ guiRun(new Runnable() {
+ public void run() {
+ tableItem = new TableItem(table, SWT.NONE);
+ tableItem.setImage(SchedulerView.COMPLETED_COLUMN, uncheckedImage);
+ tableItem.setText(SchedulerView.ALGORITHM_COLUMN, label);
+ setCalendar();
+
+ //progressBar = new ProgressBar(table, SWT.INDETERMINATE);
+ progressBar = new ProgressBar(table, SWT.NONE);
+ tableEditor = new TableEditor(table);
+ tableEditor.grabHorizontal = tableEditor.grabVertical = true;
+ tableEditor.setEditor(progressBar, tableItem, SchedulerView.PERCENT_COLUMN);
+ }
+ });
+ }
+ }
+
+ private void createIndeterminateProgressBar() {
+ if (!tableItem.isDisposed()) {
+ guiRun(new Runnable() {
+ public void run() {
+ progressBar.dispose();
+ progressBar = new ProgressBar(table, SWT.INDETERMINATE);
+ tableEditor = new TableEditor(table);
+ tableEditor.grabHorizontal = tableEditor.grabVertical = true;
+ tableEditor.setEditor(progressBar, tableItem,
+ SchedulerView.PERCENT_COLUMN);
+ }
+ });
+ }
+ }
+
+ private void setCalendar() {
+ guiRun(new Runnable() {
+ public void run() {
+ final String date = getDateString(cal);
+ final String time = getTimeString(cal);
+ tableItem.setText(SchedulerView.DATE_COLUMN, date);
+ tableItem.setText(SchedulerView.TIME_COLUMN, time);
+ }
+ });
+ }
+
+ public void algorithmStarted() {
+ if (!(algorithm instanceof ProgressTrackable)) {
+ createIndeterminateProgressBar();
+ } else {
+ ProgressMonitor monitor = ((ProgressTrackable) algorithm)
+ .getProgressMonitor();
+ if (monitor == null) {
+ createIndeterminateProgressBar();
+ }
+ }
+ }
+
+ public void reschedule(Calendar cal) {
+ this.cal = cal;
+ setCalendar();
+ }
+
+ public void finishTableEntry() {
+ if (!tableItem.isDisposed()) {
+ guiRun(new Runnable() {
+ public void run() {
+ tableItem.setImage(SchedulerView.COMPLETED_COLUMN,
+ checkedImage);
+
+ progressBar.dispose();
+ progressBar = new ProgressBar(table, SWT.NONE);
+ progressBar.setSelection(progressBar.getMaximum());
+ tableEditor = new TableEditor(table);
+ tableEditor.grabHorizontal = tableEditor.grabVertical = true;
+ tableEditor.setEditor(progressBar, tableItem,
+ SchedulerView.PERCENT_COLUMN);
+ }
+ });
+ }
+ }
+
+ public void errorTableEntry() {
+ guiRun(new Runnable() {
+ public void run() {
+ tableItem.setImage(SchedulerView.COMPLETED_COLUMN, errorImage);
+ }
+ });
+ finishTableEntry();
+ }
+
+ public void refresh() {
+ guiRun(new Runnable() {
+ public void run() {
+ tableEditor.grabHorizontal = tableEditor.grabVertical = true;
+ tableEditor.setEditor(progressBar, tableItem, SchedulerView.PERCENT_COLUMN);
+ }
+ });
+ }
+
+ public void remove() {
+ guiRun(new Runnable() {
+ public void run() {
+ progressBar.dispose();
+ tableItem.dispose();
+ }
+ });
+ }
+
+ public TableItem getTableItem() {
+ return tableItem;
+ }
+
+ /*
+ * return a properly formatted date from the given Calendar
+ */
+ private String getDateString(Calendar time) {
+ String month = (time.get(Calendar.MONTH) + 1) + "";
+ String day = time.get(Calendar.DAY_OF_MONTH) + "";
+ String year = time.get(Calendar.YEAR) + "";
+
+ if (month.length() == 1) {
+ month = "0" + month;
+ }
+
+ if (day.length() == 1) {
+ day = "0" + day;
+ }
+
+ return month + "/" + day + "/" + year;
+ }
+
+ /*
+ * return a properly formatted time from the given Calendar
+ */
+ private String getTimeString(Calendar time) {
+ String minute = time.get(Calendar.MINUTE) + "";
+ String hour = time.get(Calendar.HOUR) + "";
+ String second = time.get(Calendar.SECOND) + "";
+ int ampm = time.get(Calendar.AM_PM);
+ String amPmString = "PM";
+
+ if (ampm == Calendar.AM) {
+ amPmString = "AM";
+ }
+
+ if (minute.length() == 1) {
+ minute = "0" + minute;
+ }
+
+ if (hour.length() == 1) {
+ hour = "0" + hour;
+ }
+
+ if (second.length() == 1) {
+ second = "0" + second;
+ }
+
+ return hour + ":" + minute + ":" + second + " " + amPmString;
+ }
+
+ private void guiRun(Runnable run) {
+ if (Thread.currentThread() == Display.getDefault().getThread()) {
+ run.run();
+ } else {
+ Display.getDefault().syncExec(run);
+ }
+ }
+
+ public boolean isCancellable() {
+ return isCancellable;
+ }
+
+ public boolean isPauseable() {
+ return isPauseable;
+ }
+
+ public boolean isWorkTrackable() {
+ return isWorkTrackable();
+ }
+
+
+ private class AlgorithmProgressMonitor implements ProgressMonitor {
+ private int totalWorkUnits;
+
+ public void describeWork(String currentWork) {
+ workBeingDone = currentWork;
+ }
+
+ public void done() {
+ finishTableEntry();
+ }
+
+ public boolean isCanceled() {
+ return cancelRequested;
+ }
+
+ public boolean isPaused() {
+ return pauseRequested;
+ }
+
+ public void setCanceled(boolean value) {
+ cancelRequested = value;
+ }
+
+ public void setPaused(boolean value) {
+ pauseRequested = value;
+ }
+
+ public void start(int capabilities, int totalWorkUnits) {
+ if ((capabilities & ProgressMonitor.CANCELLABLE) > 0){
+ isCancellable = true;
+ }
+ if ((capabilities & ProgressMonitor.PAUSEABLE) > 0){
+ isPauseable = true;
+ }
+ if ((capabilities & ProgressMonitor.WORK_TRACKABLE) > 0){
+ isWorkTrackable = true;
+ guiRun(new Runnable() {
+ public void run() {
+ progressBar.dispose();
+ progressBar = new ProgressBar(table, SWT.NONE);
+ progressBar.setSelection(progressBar.getMinimum());
+ tableEditor = new TableEditor(table);
+ tableEditor.grabHorizontal = tableEditor.grabVertical = true;
+ tableEditor.setEditor(progressBar, tableItem, SchedulerView.PERCENT_COLUMN);
+ }
+ });
+ }
+ this.totalWorkUnits = totalWorkUnits;
+ }
+
+ public void worked(final int work) {
+ if (!progressBar.isDisposed()) {
+ final int totalWorkUnits = this.totalWorkUnits;
+ guiRun(new Runnable() {
+ public void run() {
+ int progress = (int) (progressBar.getMaximum() * ((double) work / (double) totalWorkUnits));
+ progressBar.setSelection(progress);
+ }
+ });
+ }
+ }
+ }
+}
Added: trunk/clients/gui/org.cishell.reference.gui.scheduler/src/org/cishell/reference/gui/scheduler/SchedulerView.java
===================================================================
--- trunk/clients/gui/org.cishell.reference.gui.scheduler/src/org/cishell/reference/gui/scheduler/SchedulerView.java (rev 0)
+++ trunk/clients/gui/org.cishell.reference.gui.scheduler/src/org/cishell/reference/gui/scheduler/SchedulerView.java 2006-11-21 22:04:58 UTC (rev 335)
@@ -0,0 +1,541 @@
+/* ****************************************************************************
+ * CIShell: Cyberinfrastructure Shell, An Algorithm Integration Framework.
+ *
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Apache License v2.0 which accompanies
+ * this distribution, and is available at:
+ * http://www.apache.org/licenses/LICENSE-2.0.html
+ *
+ * Created on Aug 21, 2006 at Indiana University.
+ *
+ * Contributors:
+ * Weixia(Bonnie) Huang, Bruce Herr
+ * School of Library and Information Science, Indiana University
+ * ***************************************************************************/
+package org.cishell.reference.gui.scheduler;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.cishell.app.service.scheduler.SchedulerListener;
+import org.cishell.app.service.scheduler.SchedulerService;
+import org.cishell.framework.algorithm.Algorithm;
+import org.cishell.framework.algorithm.ProgressMonitor;
+import org.cishell.framework.algorithm.ProgressTrackable;
+import org.cishell.framework.data.Data;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.ui.part.ViewPart;
+
+
+/**
+ * @author Ben Markines (bma...@cs...)
+ */
+public class SchedulerView extends ViewPart implements SchedulerListener {
+ private static Image upImage = Activator.createImage("up.gif");
+ private static Image downImage = Activator.createImage("down.gif");
+ private static Image playImage = Activator.createImage("play.jpeg");
+ private static Image pauseImage = Activator.createImage("pause.jpeg");
+
+ private SchedulerService schedulerService;
+
+ private Map algorithmToGuiItemMap;
+ private Map tableItemToAlgorithmMap;
+ private List algorithmDoneList;
+
+ //private static Composite parent;
+ //private Button scheduleButton;
+ private Button removeButton;
+ private Button removeAutomatically;
+ private Button up;
+ private Button down;
+
+ private Menu menu;
+
+ private Button algorithmStateButton;
+ private boolean isActive;
+
+ private Table table;
+ private boolean autoRemove;
+
+ public static final int PAUSE_INDEX = 0;
+ public static final int CANCEL_INDEX = 1;
+ public static final int START_INDEX = 2;
+
+ private PauseListener pauseListener;
+ private CancelListener cancelListener;
+ private StartListener startListener;
+
+ public static final int COMPLETED_COLUMN = 0;
+ public static final int ALGORITHM_COLUMN = 1;
+ public static final int DATE_COLUMN = 2;
+ public static final int TIME_COLUMN = 3;
+ public static final int PERCENT_COLUMN = 4;
+
+
+ /**
+ * Constructor
+ */
+ public SchedulerView() {
+ schedulerService = Activator.getSchedulerService();
+ if (schedulerService != null) {
+ schedulerService.addSchedulerListener(this);
+ }
+ algorithmToGuiItemMap = new Hashtable();
+ tableItemToAlgorithmMap = new Hashtable();
+ algorithmDoneList = new ArrayList();
+ isActive = true;
+ }
+
+ /**
+ * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
+ */
+ public void createPartControl(Composite parent) {
+ //this.parent = parent;
+
+ Composite control = new Composite(parent, SWT.NONE);
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 4;
+
+ control.setLayout(layout);
+
+ //create the buttons
+ //scheduleButton = new Button(control, SWT.PUSH);
+ //scheduleButton.setText("Schedule...");
+ //scheduleButton.setToolTipText(
+ // "Reschedule the selected item to another " + "date/time");
+ //scheduleButton.setEnabled(false);
+ /*
+ scheduleButton.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ //this button is only enabled if a single selection is made
+ SchedulerItem item = currentSelection[0];
+ SchedulerDialog dialog = new SchedulerDialog();
+ Algorithm algorithm = item.getAlgorithm();
+ IVC.getInstance().getScheduler().block(algorithm);
+
+ boolean success = dialog.open();
+
+ if (success) {
+ Calendar date = dialog.getDate();
+ boolean rescheduled = IVC.getInstance().getScheduler()
+ .reschedule(algorithm, date);
+
+ if (rescheduled) {
+ //a new item is created on reschedule, get rid of the old one
+ //first set the name, this is a bit of a hack right now..
+ model.getMostRecentAddition().setName(item.getName());
+ model.remove(item);
+ }
+ }
+
+ IVC.getInstance().getScheduler().unblock(algorithm);
+ }
+ });
+ */
+ removeButton = new Button(control, SWT.PUSH);
+ removeButton.setText("Remove From List");
+ removeButton.setEnabled(true);
+ removeButton.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ removeSelection();
+ refresh();
+ }
+ });
+
+ removeAutomatically = new Button(control, SWT.CHECK);
+ removeAutomatically.setText("Remove completed automatically");
+ removeAutomatically.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent event) {
+ autoRemove = removeAutomatically.getSelection();
+ }
+ });
+
+ Button removeAllCompleted = new Button(control, SWT.PUSH);
+ removeAllCompleted.setText("Remove all completed");
+ removeAllCompleted.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ removeCompleted();
+ }
+ });
+
+// algorithmStateButton = new Button(control, SWT.PUSH);
+// algorithmStateButton.setImage(pauseImage);
+// algorithmStateButton.addSelectionListener(new SelectionAdapter() {
+// public void widgetSelected(SelectionEvent e) {
+// if (isActive) {
+// schedulerService.setRunning(false);
+// }
+// else {
+// schedulerService.setRunning(true);
+// }
+// }
+// });
+
+
+ GridData removeAllCompletedData = new GridData();
+ removeAllCompletedData.horizontalAlignment = SWT.RIGHT;
+ removeAllCompleted.setLayoutData(removeAllCompletedData);
+
+ //composite for up and down buttons and table
+ Composite tableComposite = new Composite(control, SWT.NONE);
+ GridLayout tableCompositeLayout = new GridLayout();
+ tableCompositeLayout.numColumns = 2;
+ tableComposite.setLayout(tableCompositeLayout);
+
+ GridData compositeData = new GridData(GridData.FILL_BOTH);
+ compositeData.horizontalSpan = 4;
+ tableComposite.setLayoutData(compositeData);
+
+ //up and down buttons
+ Composite upAndDown = new Composite(tableComposite, SWT.NONE);
+ GridLayout upAndDownLayout = new GridLayout();
+ upAndDownLayout.numColumns = 1;
+ upAndDown.setLayout(upAndDownLayout);
+
+ up = new Button(upAndDown, SWT.PUSH);
+ up.setToolTipText(
+ "Moves the selected item up in the queue if possible. Only" +
+ " queued items can be moved without rescheduling.");
+ up.setEnabled(false);
+ up.setImage(upImage);
+
+ /*
+ up.addSelectionListener(new UpButtonListener());
+ */
+
+ down = new Button(upAndDown, SWT.PUSH);
+ down.setToolTipText(
+ "Moves the selected item down in the queue if possible. Only" +
+ " queued items can be moved without rescheduling.");
+ down.setEnabled(false);
+ down.setImage(downImage);
+ /*
+ down.addSelectionListener(new DownButtonListener());
+ */
+
+ // Create the table
+ createTable(tableComposite);
+
+ table.addSelectionListener(new ContextMenuListener());
+ //table.addMouseListener(new ContextMenuListener());
+
+
+ //Set right click menu
+ menu = new Menu(table);
+ menu.setVisible(false);
+
+ MenuItem pauseItem = new MenuItem(menu, SWT.PUSH);
+ pauseItem.setText("pause");
+ pauseListener = new PauseListener();
+ pauseItem.addListener(SWT.Selection, pauseListener);
+
+ MenuItem cancelItem = new MenuItem(menu, SWT.PUSH);
+ cancelItem.setText("cancel");
+ cancelListener = new CancelListener();
+ cancelItem.addListener(SWT.Selection, cancelListener);
+
+ MenuItem startItem = new MenuItem(menu, SWT.PUSH);
+ startItem.setText("start");
+ startListener = new StartListener();
+ startItem.addListener(SWT.Selection, startListener);
+
+ table.setMenu(menu);
+
+ GridData gridData = new GridData(GridData.FILL_BOTH);
+ table.setLayoutData(gridData);
+
+ /*
+ IMenuManager menu = IVCApplication.getMenuManager();
+ IContributionItem item = menu.findUsingPath("tools/scheduler");
+ if(item != null){
+ final IAction action = ((ActionContributionItem) item).getAction();
+ action.setChecked(true);
+ }
+
+ //initialize based on data in the model
+ refreshView();
+ */
+ }
+
+ public void setFocus() {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void algorithmError(Algorithm algorithm, Throwable error) {
+ SchedulerTableItem schedulerTableItem = (SchedulerTableItem)algorithmToGuiItemMap.get(algorithm);
+ schedulerTableItem.errorTableEntry();
+ }
+
+ public void algorithmFinished(Algorithm algorithm, Data[] createdData) {
+ SchedulerTableItem schedulerTableItem = (SchedulerTableItem)algorithmToGuiItemMap.get(algorithm);
+ if (schedulerTableItem != null) {
+ schedulerTableItem.finishTableEntry();
+ if (autoRemove) {
+ schedulerTableItem.remove();
+ algorithmToGuiItemMap.remove(algorithm);
+ } else {
+ algorithmDoneList.add(algorithm);
+ }
+ }
+ }
+
+ public void algorithmRescheduled(Algorithm algorithm, Calendar time) {
+ SchedulerTableItem schedulerTableItem = (SchedulerTableItem)algorithmToGuiItemMap.get(algorithm);
+ schedulerTableItem.reschedule(time);
+
+ }
+
+ public void algorithmScheduled(Algorithm algorithm, Calendar cal) {
+ SchedulerTableItem schedulerTableItem = new SchedulerTableItem(schedulerService, algorithm, cal, table);
+ schedulerTableItem.createTableEntry();
+ algorithmToGuiItemMap.put(algorithm, schedulerTableItem);
+
+ TableItem tableItem = schedulerTableItem.getTableItem();
+ tableItemToAlgorithmMap.put(tableItem, algorithm);
+ }
+
+ public void algorithmStarted(Algorithm algorithm) {
+ SchedulerTableItem schedulerTableItem = (SchedulerTableItem)algorithmToGuiItemMap.get(algorithm);
+ schedulerTableItem.algorithmStarted();
+ }
+
+ public void algorithmUnscheduled(Algorithm algorithm) {
+ SchedulerTableItem schedulerTableItem = (SchedulerTableItem)algorithmToGuiItemMap.get(algorithm);
+ schedulerTableItem.remove();
+ }
+
+ public void schedulerCleared() {
+ for (Iterator i = algorithmToGuiItemMap.values().iterator(); i.hasNext();) {
+ SchedulerTableItem schedulerTableItem = (SchedulerTableItem)i.next();
+ schedulerTableItem.remove();
+ }
+ algorithmToGuiItemMap.clear();
+ tableItemToAlgorithmMap.clear();
+ }
+
+ public void schedulerRunStateChanged(boolean isRunning) {
+ isActive = isRunning;
+ if (isActive) {
+ algorithmStateButton.setImage(pauseImage);
+ }
+ else {
+ algorithmStateButton.setImage(playImage);
+ }
+ }
+
+ /*
+ * Create the Table control
+ */
+ private void createTable(Composite parent) {
+ int style = SWT.MULTI | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL |
+ SWT.FULL_SELECTION;
+
+ table = new Table(parent, style);
+ table.setLinesVisible(true);
+ table.setHeaderVisible(true);
+
+ // 1st column with checkboxes for completion
+ TableColumn column = new TableColumn(table, SWT.CENTER, 0);
+ column.setText("!");
+ column.setWidth(20);
+
+ // 2nd column with Algorithm name
+ column = new TableColumn(table, SWT.LEFT, 1);
+ column.setText("Algorithm Name");
+ column.setWidth(150);
+
+ // 3rd column with date
+ column = new TableColumn(table, SWT.LEFT, 2);
+ column.setText("Date");
+ column.setWidth(90);
+
+ // 4th column with time
+ column = new TableColumn(table, SWT.LEFT, 3);
+ column.setText("Time");
+ column.setWidth(90);
+
+ // 5th column with task PercentComplete
+ column = new TableColumn(table, SWT.CENTER, 4);
+ column.setText("% Complete");
+ column.setWidth(120);
+
+// //selection listener to keep currentSelection variable up to date
+// table.addSelectionListener(new SelectionAdapter() {
+// public void widgetSelected(SelectionEvent e) {
+// TableItem[] selection = table.getSelection();
+// currentSelection = new SchedulerItem[selection.length];
+//
+// for (int i = 0; i < selection.length; i++) {
+// SchedulerItem item = SchedulerItem.getSchedulerItem(selection[i]);
+// currentSelection[i] = item;
+// }
+//
+// updateUpAndDown();
+// refreshButtons();
+// }
+// });
+//
+// //key listener to allow you to remove items with the delete key
+// table.addKeyListener(new KeyAdapter() {
+// public void keyReleased(KeyEvent e) {
+// if (e.keyCode == SWT.DEL) {
+// removeSelection();
+// }
+// }
+// });
+//
+// //listener for dragging of items up and down in the running queue
+// ItemDragListener dragListener = new ItemDragListener();
+// table.addMouseMoveListener(dragListener);
+// table.addMouseListener(dragListener);
+ }
+
+ private void removeSelection() {
+ TableItem[] tableItems = table.getSelection();
+
+ for (int i = 0; i < tableItems.length; ++i) {
+ for (Iterator j = algorithmToGuiItemMap.keySet().iterator(); j.hasNext();) {
+ Algorithm algorithm = (Algorithm)j.next();
+ SchedulerTableItem schedulerTableItem =
+ (SchedulerTableItem)algorithmToGuiItemMap.get(algorithm);
+ if (tableItems[i].equals(schedulerTableItem.getTableItem())) {
+ if (algorithmIsProgressTrackable(algorithm)) {
+ ProgressMonitor monitor = ((ProgressTrackable)algorithm).getProgressMonitor();
+ monitor.setCanceled(true);
+ }
+ schedulerTableItem.remove();
+ algorithmToGuiItemMap.remove(algorithm);
+ break;
+ }
+ }
+ }
+ }
+
+ private void removeCompleted() {
+ for (Iterator i = algorithmDoneList.iterator(); i.hasNext();) {
+ Object pid = i.next();
+ SchedulerTableItem schedulerTableItem =
+ (SchedulerTableItem)algorithmToGuiItemMap.get(pid);
+ if (schedulerTableItem != null) {
+ schedulerTableItem.remove();
+ algorithmToGuiItemMap.remove(pid);
+ }
+ }
+ algorithmDoneList.clear();
+ }
+
+ private void refresh() {
+ for (Iterator i = algorithmToGuiItemMap.values().iterator(); i.hasNext();) {
+ SchedulerTableItem schedulerTableItem = (SchedulerTableItem)i.next();
+ schedulerTableItem.refresh();
+ }
+ }
+
+ private boolean algorithmIsProgressTrackable(Algorithm algorithm) {
+ if (algorithm != null) {
+ ProgressMonitor monitor = ((ProgressTrackable) algorithm)
+ .getProgressMonitor();
+ if (monitor != null) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private void setEnabledMenuItems(Algorithm algorithm) {
+ SchedulerTableItem schedulerTableItem = (SchedulerTableItem)algorithmToGuiItemMap.get(algorithm);
+
+ MenuItem menuItem = menu.getItem(CANCEL_INDEX);
+ menuItem.setEnabled(schedulerTableItem.isCancellable());
+
+ menuItem = menu.getItem(PAUSE_INDEX);
+ menuItem.setEnabled(schedulerTableItem.isPauseable());
+ menuItem = menu.getItem(START_INDEX);
+ menuItem.setEnabled(schedulerTableItem.isPauseable());
+ }
+
+ private class ContextMenuListener extends SelectionAdapter {
+ public void widgetSelected(SelectionEvent e) {
+ TableItem item = table.getItem(table.getSelectionIndex());
+ if (item != null) {
+ Algorithm algorithm = (Algorithm)tableItemToAlgorithmMap.get(item);
+ if (algorithmIsProgressTrackable(algorithm)) {
+ setEnabledMenuItems(algorithm);
+ }
+ else {
+ setEnabledMenuItems(algorithm);
+ }
+ }
+ }
+ }
+
+
+ private class PauseListener implements Listener {
+ public void handleEvent(Event event) {
+ TableItem item = table.getItem(table.getSelectionIndex());
+ if (item != null) {
+ Algorithm algorithm = (Algorithm)tableItemToAlgorithmMap.get(item);
+ if (algorithm instanceof ProgressTrackable) {
+ ProgressMonitor monitor = ((ProgressTrackable)algorithm).getProgressMonitor();
+ if (monitor != null) {
+ monitor.setPaused(true);
+ }
+ }
+ }
+ }
+ }
+
+ private class CancelListener implements Listener {
+ public void handleEvent(Event event) {
+ TableItem item = table.getItem(table.getSelectionIndex());
+ if (item != null) {
+ Algorithm algorithm = (Algorithm) tableItemToAlgorithmMap
+ .get(item);
+ if (algorithm instanceof ProgressTrackable) {
+ ProgressMonitor monitor = ((ProgressTrackable) algorithm)
+ .getProgressMonitor();
+ if (monitor != null) {
+ monitor.setCanceled(true);
+ }
+ }
+ }
+ }
+ }
+
+ private class StartListener implements Listener {
+
+ public void handleEvent(Event event) {
+ TableItem item = table.getItem(table.getSelectionIndex());
+ if (item != null) {
+ Algorithm algorithm = (Algorithm) tableItemToAlgorithmMap
+ .get(item);
+ if (algorithm instanceof ProgressTrackable) {
+ ProgressMonitor monitor = ((ProgressTrackable) algorithm)
+ .getProgressMonitor();
+ if (monitor != null) {
+ monitor.setPaused(false);
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <bea...@us...> - 2006-11-21 22:01:29
|
Revision: 334
http://svn.sourceforge.net/cishell/?rev=334&view=rev
Author: bearsfan
Date: 2006-11-21 14:01:18 -0800 (Tue, 21 Nov 2006)
Log Message:
-----------
Initial import.
Added Paths:
-----------
trunk/clients/gui/org.cishell.reference.gui.scheduler/
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <hu...@us...> - 2006-11-21 16:16:08
|
Revision: 333
http://svn.sourceforge.net/cishell/?rev=333&view=rev
Author: huangb
Date: 2006-11-21 08:15:45 -0800 (Tue, 21 Nov 2006)
Log Message:
-----------
minus change of the format when logging the reference url
Modified Paths:
--------------
trunk/clients/gui/org.cishell.reference.gui.menumanager/src/org/cishell/reference/gui/menumanager/menu/AlgorithmAction.java
Modified: trunk/clients/gui/org.cishell.reference.gui.menumanager/src/org/cishell/reference/gui/menumanager/menu/AlgorithmAction.java
===================================================================
--- trunk/clients/gui/org.cishell.reference.gui.menumanager/src/org/cishell/reference/gui/menumanager/menu/AlgorithmAction.java 2006-10-30 17:02:41 UTC (rev 332)
+++ trunk/clients/gui/org.cishell.reference.gui.menumanager/src/org/cishell/reference/gui/menumanager/menu/AlgorithmAction.java 2006-11-21 16:15:45 UTC (rev 333)
@@ -122,7 +122,7 @@
String reference_url = (String)ref.getProperty("reference_url");
if (reference != null && reference_url != null )
logger.log(LogService.LOG_INFO, "Reference: "+reference+
- " ( "+reference_url+" )");
+ " ("+reference_url+")");
else if (reference != null && reference_url == null )
logger.log(LogService.LOG_INFO, "Reference: "+reference);
String docu = (String)ref.getProperty("docu");
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <bh...@us...> - 2006-10-30 17:03:10
|
Revision: 332
http://svn.sourceforge.net/cishell/?rev=332&view=rev
Author: bh2
Date: 2006-10-30 09:02:41 -0800 (Mon, 30 Oct 2006)
Log Message:
-----------
updated sampledata handling by the installer
updated the conversionGraph sample data to the latest conversion graph
Modified Paths:
--------------
trunk/deployment/cishell-installer/install.xml
trunk/deployment/cishell-installer/sampledata/Network/conversionGraph.graphml.xml
Modified: trunk/deployment/cishell-installer/install.xml
===================================================================
--- trunk/deployment/cishell-installer/install.xml 2006-10-30 14:52:06 UTC (rev 331)
+++ trunk/deployment/cishell-installer/install.xml 2006-10-30 17:02:41 UTC (rev 332)
@@ -106,6 +106,11 @@
<fileset dir="../cishell_linux" os="unix"
targetdir="$INSTALL_PATH">
<include name="**/*" />
+ </fileset>
+
+ <fileset dir=".."
+ targetdir="$INSTALL_PATH">
+ <include name="sampledata/**/*" />
</fileset>
<fileset dir="../cishell_win32" os="windows"
Modified: trunk/deployment/cishell-installer/sampledata/Network/conversionGraph.graphml.xml
===================================================================
--- trunk/deployment/cishell-installer/sampledata/Network/conversionGraph.graphml.xml 2006-10-30 14:52:06 UTC (rev 331)
+++ trunk/deployment/cishell-installer/sampledata/Network/conversionGraph.graphml.xml 2006-10-30 17:02:41 UTC (rev 332)
@@ -2,20 +2,23 @@
<graphml xmlns="http://graphml.graphdrawing.org/xmlns/graphml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns/graphml">
<graph edgedefault="directed" >
-<node id="1" label="file:text/xgmml+xml" />
+<node id="1" label="edu.berkeley.guir.prefuse.graph.Graph" />
<node id="2" label="prefuse.data.Graph" />
-<node id="3" label="file:application/pajek" />
-<node id="4" label="edu.uci.ics.jung.graph.Graph" />
-<node id="5" label="edu.berkeley.guir.prefuse.graph.Graph" />
-<node id="6" label="file:text/graphml+xml" />
+<node id="3" label="file:text/graphml+xml" />
+<node id="4" label="file:application/pajek" />
+<node id="5" label="file:text/xgmml+xml" />
+<node id="6" label="edu.uci.ics.jung.graph.Graph" />
+<node id="7" label="file:text/nwb" />
+<edge source="1" target="5" directed="true"/>
+<edge source="3" target="7" directed="true"/>
<edge source="4" target="6" directed="true"/>
-<edge source="3" target="4" directed="true"/>
-<edge source="2" target="6" directed="true"/>
+<edge source="6" target="1" directed="true"/>
+<edge source="2" target="3" directed="true"/>
+<edge source="6" target="4" directed="true"/>
<edge source="5" target="1" directed="true"/>
-<edge source="4" target="3" directed="true"/>
-<edge source="4" target="5" directed="true"/>
-<edge source="6" target="4" directed="true"/>
-<edge source="1" target="5" directed="true"/>
-<edge source="6" target="2" directed="true"/>
+<edge source="6" target="3" directed="true"/>
+<edge source="7" target="3" directed="true"/>
+<edge source="3" target="6" directed="true"/>
+<edge source="3" target="2" directed="true"/>
</graph>
</graphml>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <hu...@us...> - 2006-10-30 14:52:17
|
Revision: 331
http://svn.sourceforge.net/cishell/?rev=331&view=rev
Author: huangb
Date: 2006-10-30 06:52:06 -0800 (Mon, 30 Oct 2006)
Log Message:
-----------
turn off saveGraph()
Modified Paths:
--------------
trunk/core/org.cishell.reference/src/org/cishell/reference/service/conversion/DataConversionServiceImpl.java
Modified: trunk/core/org.cishell.reference/src/org/cishell/reference/service/conversion/DataConversionServiceImpl.java
===================================================================
--- trunk/core/org.cishell.reference/src/org/cishell/reference/service/conversion/DataConversionServiceImpl.java 2006-10-30 14:24:34 UTC (rev 330)
+++ trunk/core/org.cishell.reference/src/org/cishell/reference/service/conversion/DataConversionServiceImpl.java 2006-10-30 14:52:06 UTC (rev 331)
@@ -129,7 +129,7 @@
* @param outFormat The format to convert to
*/
public Converter[] findConverters(String inFormat, String outFormat) {
- saveGraph();
+// saveGraph();
if (inFormat != null && inFormat.length() > 0 &&
outFormat != null && outFormat.length() > 0) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <bh...@us...> - 2006-10-30 14:24:50
|
Revision: 330
http://svn.sourceforge.net/cishell/?rev=330&view=rev
Author: bh2
Date: 2006-10-30 06:24:34 -0800 (Mon, 30 Oct 2006)
Log Message:
-----------
fixed race condition in the data conversion service implementation
Modified Paths:
--------------
trunk/core/org.cishell.reference/src/org/cishell/reference/service/conversion/DataConversionServiceImpl.java
Modified: trunk/core/org.cishell.reference/src/org/cishell/reference/service/conversion/DataConversionServiceImpl.java
===================================================================
--- trunk/core/org.cishell.reference/src/org/cishell/reference/service/conversion/DataConversionServiceImpl.java 2006-10-27 21:02:29 UTC (rev 329)
+++ trunk/core/org.cishell.reference/src/org/cishell/reference/service/conversion/DataConversionServiceImpl.java 2006-10-30 14:24:34 UTC (rev 330)
@@ -72,6 +72,9 @@
public DataConversionServiceImpl(BundleContext bContext, CIShellContext ciContext) {
this.bContext = bContext;
this.ciContext = ciContext;
+
+ this.graph = new DirectedSparseGraph();
+ this.dataTypeToVertex = new Hashtable();
String filter = "(&("+ALGORITHM_TYPE+"="+TYPE_CONVERTER+")" +
"("+IN_DATA+"=*) " +
@@ -92,11 +95,7 @@
* Assemble the directed graph of converters. Currently unweighted
*
*/
- private void assembleGraph() {
- graph = new DirectedSparseGraph();
-
- dataTypeToVertex = new Hashtable();
-
+ private void assembleGraph() {
try {
String filter = "(&("+ALGORITHM_TYPE+"="+TYPE_CONVERTER+")" +
"("+IN_DATA+"=*) " +
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <bh...@us...> - 2006-10-27 21:02:35
|
Revision: 329
http://svn.sourceforge.net/cishell/?rev=329&view=rev
Author: bh2
Date: 2006-10-27 14:02:29 -0700 (Fri, 27 Oct 2006)
Log Message:
-----------
Tag for CIShell 0.2.1
Added Paths:
-----------
tags/0.2.1/
Copied: tags/0.2.1 (from rev 328, trunk)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <bh...@us...> - 2006-10-27 20:21:47
|
Revision: 328
http://svn.sourceforge.net/cishell/?rev=328&view=rev
Author: bh2
Date: 2006-10-27 13:21:33 -0700 (Fri, 27 Oct 2006)
Log Message:
-----------
cleaned up input parameter printing in the console
Modified Paths:
--------------
trunk/clients/gui/org.cishell.reference.gui.menumanager/src/org/cishell/reference/gui/menumanager/menu/AlgorithmAction.java
trunk/clients/gui/org.cishell.reference.gui.menumanager/src/org/cishell/reference/gui/menumanager/menu/AlgorithmWrapper.java
Modified: trunk/clients/gui/org.cishell.reference.gui.menumanager/src/org/cishell/reference/gui/menumanager/menu/AlgorithmAction.java
===================================================================
--- trunk/clients/gui/org.cishell.reference.gui.menumanager/src/org/cishell/reference/gui/menumanager/menu/AlgorithmAction.java 2006-10-27 19:54:39 UTC (rev 327)
+++ trunk/clients/gui/org.cishell.reference.gui.menumanager/src/org/cishell/reference/gui/menumanager/menu/AlgorithmAction.java 2006-10-27 20:21:33 UTC (rev 328)
@@ -75,38 +75,7 @@
//save the current data
Data[] data = this.data;
Converter[][] converters = this.converters;
-
- //Print out acknowledge info. Not sure this is the right place.
- //But it seems working fine.
- LogService logger = (LogService) ciContext.getService(LogService.class.getName());
-
- String label = (String)ref.getProperty("label");
- if (label != null){
- logger.log(LogService.LOG_INFO, "..........");
- logger.log(LogService.LOG_INFO, label+" was selected.");
- }
- String authors = (String)ref.getProperty("authors");
- if (authors != null)
- logger.log(LogService.LOG_INFO, "Author(s): "+authors);
- String implementers = (String)ref.getProperty("implementers");
- if (implementers != null)
- logger.log(LogService.LOG_INFO, "Implementer(s): "+implementers);
- String integrators = (String)ref.getProperty("integrators");
- if (integrators != null)
- logger.log(LogService.LOG_INFO, "Integrator(s): "+integrators);
- String reference = (String)ref.getProperty("reference");
- String reference_url = (String)ref.getProperty("reference_url");
- if (reference != null && reference_url != null )
- logger.log(LogService.LOG_INFO, "Reference: "+reference+
- " ( "+reference_url+" )");
- else if (reference != null && reference_url == null )
- logger.log(LogService.LOG_INFO, "Reference: "+reference);
- String docu = (String)ref.getProperty("docu");
- if (docu != null)
- logger.log(LogService.LOG_INFO, "Docu: "+docu);
-///////////////////////////
-
SchedulerService scheduler = (SchedulerService)
bContext.getService(bContext.getServiceReference(
SchedulerService.class.getName()));
@@ -116,6 +85,8 @@
AlgorithmFactory factory = (AlgorithmFactory) bContext.getService(ref);
MetaTypeProvider provider = factory.createParameters(null);
String pid = (String)ref.getProperty(Constants.SERVICE_PID);
+
+ printAlgorithmInformation();
Dictionary params = new Hashtable();
if (provider != null) {
@@ -123,13 +94,43 @@
}
if (params != null) {
- scheduler.schedule(new AlgorithmWrapper(ref, bContext, ciContext, originalData, data, converters, params), ref);
+ scheduler.schedule(new AlgorithmWrapper(ref, bContext, ciContext, originalData, data, converters, provider, params), ref);
}
} catch (Throwable e) {
e.printStackTrace();
}
}
+ private void printAlgorithmInformation() {
+ LogService logger = (LogService) ciContext.getService(LogService.class.getName());
+
+ String label = (String)ref.getProperty("label");
+ if (label != null){
+ logger.log(LogService.LOG_INFO, "..........");
+ logger.log(LogService.LOG_INFO, label+" was selected.");
+ }
+ String authors = (String)ref.getProperty("authors");
+ if (authors != null)
+ logger.log(LogService.LOG_INFO, "Author(s): "+authors);
+ String implementers = (String)ref.getProperty("implementers");
+ if (implementers != null)
+ logger.log(LogService.LOG_INFO, "Implementer(s): "+implementers);
+ String integrators = (String)ref.getProperty("integrators");
+ if (integrators != null)
+ logger.log(LogService.LOG_INFO, "Integrator(s): "+integrators);
+ String reference = (String)ref.getProperty("reference");
+ String reference_url = (String)ref.getProperty("reference_url");
+ if (reference != null && reference_url != null )
+ logger.log(LogService.LOG_INFO, "Reference: "+reference+
+ " ( "+reference_url+" )");
+ else if (reference != null && reference_url == null )
+ logger.log(LogService.LOG_INFO, "Reference: "+reference);
+ String docu = (String)ref.getProperty("docu");
+ if (docu != null)
+ logger.log(LogService.LOG_INFO, "Docu: "+docu);
+
+ }
+
public void dataSelected(Data[] selectedData) {
String inDataString = (String)ref.getProperty(IN_DATA);
String[] inData = ("" + inDataString).split(",");
Modified: trunk/clients/gui/org.cishell.reference.gui.menumanager/src/org/cishell/reference/gui/menumanager/menu/AlgorithmWrapper.java
===================================================================
--- trunk/clients/gui/org.cishell.reference.gui.menumanager/src/org/cishell/reference/gui/menumanager/menu/AlgorithmWrapper.java 2006-10-27 19:54:39 UTC (rev 327)
+++ trunk/clients/gui/org.cishell.reference.gui.menumanager/src/org/cishell/reference/gui/menumanager/menu/AlgorithmWrapper.java 2006-10-27 20:21:33 UTC (rev 328)
@@ -16,7 +16,9 @@
import java.util.ArrayList;
import java.util.Dictionary;
import java.util.Enumeration;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import org.cishell.app.service.datamanager.DataManagerService;
import org.cishell.framework.CIShellContext;
@@ -28,8 +30,12 @@
import org.cishell.service.conversion.Converter;
import org.cishell.service.guibuilder.GUIBuilderService;
import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
import org.osgi.framework.ServiceReference;
import org.osgi.service.log.LogService;
+import org.osgi.service.metatype.AttributeDefinition;
+import org.osgi.service.metatype.MetaTypeProvider;
+import org.osgi.service.metatype.ObjectClassDefinition;
public class AlgorithmWrapper implements Algorithm, AlgorithmProperty {
@@ -40,10 +46,13 @@
protected Data[] data;
protected Converter[][] converters;
protected Dictionary parameters;
+ protected Map idToLabelMap;
+ protected MetaTypeProvider provider;
public AlgorithmWrapper(ServiceReference ref, BundleContext bContext,
CIShellContext ciContext, Data[] originalData, Data[] data,
- Converter[][] converters, Dictionary parameters) {
+ Converter[][] converters, MetaTypeProvider provider,
+ Dictionary parameters) {
this.ref = ref;
this.bContext = bContext;
this.ciContext = ciContext;
@@ -51,6 +60,8 @@
this.data = data;
this.converters = converters;
this.parameters = parameters;
+ this.provider = provider;
+ this.idToLabelMap = new HashMap();
}
/**
@@ -68,19 +79,7 @@
AlgorithmFactory factory = (AlgorithmFactory) bContext.getService(ref);
Algorithm alg = factory.createAlgorithm(data, parameters, ciContext);
- LogService logger = getLogService();
- if (logger != null) {
- if (!this.parameters.isEmpty()) {
- logger.log(LogService.LOG_INFO, "");
- logger.log(LogService.LOG_INFO, "Input Parameters:");
- for (Enumeration e = this.parameters.keys(); e
- .hasMoreElements();) {
- String key = (String) e.nextElement();
- logger.log(LogService.LOG_INFO, key + ": "
- + this.parameters.get(key));
- }
- }
- }
+ printParameters();
Data[] outData = alg.execute();
@@ -117,6 +116,49 @@
}
}
+ protected void printParameters() {
+ LogService logger = getLogService();
+ setupIdToLabelMap();
+
+ if (logger != null) {
+ if (!this.parameters.isEmpty()) {
+ logger.log(LogService.LOG_INFO, "");
+ logger.log(LogService.LOG_INFO, "Input Parameters:");
+ for (Enumeration e = this.parameters.keys(); e
+ .hasMoreElements();) {
+ String key = (String) e.nextElement();
+ Object value = this.parameters.get(key);
+
+ key = (String) idToLabelMap.get(key);
+
+ logger.log(LogService.LOG_INFO, key+": "+value);
+ }
+ }
+ }
+ }
+
+ protected void setupIdToLabelMap() {
+ if (provider != null) {
+ ObjectClassDefinition ocd = null;
+ try {
+ String pid = (String) ref.getProperty(Constants.SERVICE_PID);
+ ocd = provider.getObjectClassDefinition(pid, null);
+
+ if (ocd != null) {
+ AttributeDefinition[] attr =
+ ocd.getAttributeDefinitions(ObjectClassDefinition.ALL);
+
+ for (int i=0; i < attr.length; i++) {
+ String id = attr[i].getID();
+ String label = attr[i].getName();
+
+ idToLabelMap.put(id, label);
+ }
+ }
+ } catch (IllegalArgumentException e) {}
+ }
+ }
+
//only does anything if parentage=default so far...
protected void doParentage(Data[] outData) {
//make sure the parent set is the original Data and not the
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|