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. |