From: <bh...@us...> - 2006-10-04 01:46:25
|
Revision: 240 http://svn.sourceforge.net/cishell/?rev=240&view=rev Author: bh2 Date: 2006-10-02 10:05:45 -0700 (Mon, 02 Oct 2006) Log Message: ----------- updated file load and save's loading and saving default directories Modified Paths: -------------- trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/load/FileLoad.java 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/load/FileLoad.java =================================================================== --- trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/load/FileLoad.java 2006-10-02 16:15:44 UTC (rev 239) +++ trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/load/FileLoad.java 2006-10-02 17:05:45 UTC (rev 240) @@ -99,7 +99,12 @@ FileDialog dialog = new FileDialog(window.getShell(), SWT.OPEN); if (currentDir == null) { currentDir = new File(System.getProperty("user.dir") + File.separator + "sampledata"); -// currentDir = new File(System.getProperty("user.dir") + File.separator + "sampledata" + File.separator + "anything"); + + if (!currentDir.exists()) { + currentDir = new File(System.getProperty("user.home") + File.separator + "anything"); + } else { + currentDir = new File(System.getProperty("user.dir") + File.separator + "sampledata" + File.separator + "anything"); + } } dialog.setFilterPath(currentDir.getPath()); dialog.setText("Select a File"); @@ -110,12 +115,12 @@ File file = new File(fileName); - if (file.isDirectory()) { - currentDir = file; - } else { - currentDir = new File(file.getPath()); - } - + if (file.isDirectory()) { + currentDir = new File(file + File.separator + "anything"); + } else { + currentDir = new File(file.getParent() + File.separator + "anything"); + } + String fileExtension = getFileExtension(file); String filter = "(&(type=converter)(in_data=file-ext:"+fileExtension+"))"; try { 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-10-02 16:15:44 UTC (rev 239) +++ trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/save/FileSaver.java 2006-10-02 17:05:45 UTC (rev 240) @@ -44,14 +44,14 @@ private boolean confirmFileOverwrite(File file) { String message = "The file:\n" + file.getPath() + "\nalready exists. Are you sure you want to overwrite it?"; - return guiBuilder.showConfirm("File Overwrite", message, message); + return guiBuilder.showConfirm("File Overwrite", message, ""); } private boolean isSaveFileValid(File file) { boolean valid = false; if (file.isDirectory()) { String message = "Destination cannot be a directory. Please choose a file"; - guiBuilder.showError("Invalid Destination", message, message); + guiBuilder.showError("Invalid Destination", message, ""); valid = false; } else if (file.exists()) { valid = confirmFileOverwrite(file); @@ -68,21 +68,24 @@ String ext = outDataStr.substring(outDataStr.indexOf(':')+1); + if ((""+ext).startsWith(".")) { + ext = ext.substring(1); + } + FileDialog dialog = new FileDialog(parent, SWT.SAVE); if (currentDir == null) { - currentDir = new File(System.getProperty("user.home")); + currentDir = new File(System.getProperty("user.home") + File.separator + "anything"); } dialog.setFilterPath(currentDir.getPath()); - dialog.setFilterExtensions(new String[]{"*" + ext}); + dialog.setFilterExtensions(new String[]{"*." + ext}); dialog.setText("Choose File"); String fileLabel = (String)data.getMetaData().get(DataProperty.LABEL); if (fileLabel == null) { - dialog.setFileName("*" + ext); - } - else { + dialog.setFileName("*." + ext); + } else { dialog.setFileName(fileLabel + '.' + ext); } @@ -96,19 +99,19 @@ continue; if (ext != null && ext.length() != 0) if (!selectedFile.getPath().endsWith(ext)) - selectedFile = new File(selectedFile.getPath() + ext) ; + selectedFile = new File(selectedFile.getPath()+'.'+ ext); Data newData = converter.convert(data); copy((File)newData.getData(), selectedFile); if (selectedFile.isDirectory()) { - currentDir = selectedFile; + currentDir = new File(selectedFile + File.separator + "anything"); } else { - currentDir = new File(selectedFile.getParent()); + currentDir = new File(selectedFile.getParent() + File.separator + "anything"); } - done = true ; + done = true; logService.log(LogService.LOG_INFO, "Saved: " + selectedFile.getPath() + "\n"); } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hu...@us...> - 2006-10-11 20:44:24
|
Revision: 267 http://svn.sourceforge.net/cishell/?rev=267&view=rev Author: huangb Date: 2006-10-11 13:44:18 -0700 (Wed, 11 Oct 2006) Log Message: ----------- initial version Added Paths: ----------- trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/ 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/FileViewFactory.java trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/ViewDataChooser.java Added: 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 (rev 0) +++ trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/FileView.java 2006-10-11 20:44:18 UTC (rev 267) @@ -0,0 +1,177 @@ +package org.cishell.reference.gui.persistence.view; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.nio.channels.FileChannel; +import java.util.Dictionary; + +import org.osgi.service.log.LogService; + +import org.eclipse.swt.program.Program; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.Display; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.IWorkbenchWindow; + +import org.cishell.framework.CIShellContext; +import org.cishell.framework.algorithm.Algorithm; +import org.cishell.framework.data.Data; +import org.cishell.service.conversion.DataConversionService; +import org.cishell.service.guibuilder.GUIBuilderService; +import org.cishell.service.conversion.Converter; + +/* + * @author Weixia(Bonnie) Huang (hu...@in...) + */ +public class FileView implements Algorithm { + Data[] data; + Dictionary parameters; + CIShellContext context; + DataConversionService conversionManager; + static GUIBuilderService guiBuilder; + LogService logger; + + + public FileView(Data[] data, Dictionary parameters, CIShellContext context) { + this.data = data; + this.parameters = parameters; + this.context = context; + + conversionManager = (DataConversionService) context.getService( + DataConversionService.class.getName()); + + logger = (LogService)context.getService(LogService.class.getName()); + guiBuilder = (GUIBuilderService)context.getService(GUIBuilderService.class.getName()); + + } + public File getTempFile(){ + File tempFile; + + String tempPath = System.getProperty("java.io.tmpdir"); + File tempDir = new File(tempPath+File.separator+"temp"); + if(!tempDir.exists()) + tempDir.mkdir(); + try{ + tempFile = File.createTempFile("xxx-Session-", ".txt", tempDir); + + }catch (IOException e){ + logger.log(LogService.LOG_ERROR, e.toString()); + tempFile = new File (tempPath+File.separator+"temp"+File.separator+"temp.txt"); + + } + return tempFile; + } + + public Data[] execute() { + boolean lastSaveSuccessful = false; + String format; + File tempFile; + Display display; + IWorkbenchWindow[] windows; + final Shell parentShell; + + + windows = PlatformUI.getWorkbench().getWorkbenchWindows(); + if (windows.length == 0){ + return null; + } + parentShell = windows[0].getShell(); + display = PlatformUI.getWorkbench().getDisplay(); + tempFile = getTempFile(); + + for (int i = 0; i < data.length; i++){ + Object theData = data[i].getData(); + format = data[i].getFormat(); + if (theData instanceof File || + format.startsWith("file:text/") || + format.startsWith("file-ext:")){ + copy((File)data[i].getData(), tempFile); + lastSaveSuccessful = true; + }else{ + final Converter[] converters = conversionManager.findConverters(data[i], "file-ext:*"); + + if (converters.length < 1) { + guiBuilder.showError("No Converters", + "No valid converters for data type: " + + data[i].getData().getClass().getName(), + "Please install a plugin that will save the data type to a file"); + } + else { + if (!parentShell.isDisposed()) { + DataViewer dataViewer = new DataViewer(parentShell, data[i], converters); + display.syncExec(dataViewer); + lastSaveSuccessful = dataViewer.isSaved; + tempFile = dataViewer.theFile; + } + } + } + //display the file content + Program program = Program.findProgram("txt"); + if (program == null) { + guiBuilder.showError("No Text Viewer", + "No valid text viewer for the .txt file. " + + "The file is located at: "+tempFile.getAbsolutePath(), + "Unable to open default text viewer. File is located at: "+ + tempFile.getAbsolutePath()); + return null; + } + else { + if (lastSaveSuccessful == true) { + program.execute(tempFile.getAbsolutePath()); + } + } + + + + } + return null; + } + + public static boolean copy(File in, File out) { + try { + FileInputStream fis = new FileInputStream(in); + FileOutputStream fos = new FileOutputStream(out); + + FileChannel readableChannel = fis.getChannel(); + FileChannel writableChannel = fos.getChannel(); + + writableChannel.truncate(0); + writableChannel.transferFrom(readableChannel, 0, readableChannel.size()); + fis.close(); + fos.close(); + return true; + } + catch (IOException ioe) { + guiBuilder.showError("Copy Error", "IOException during copy", ioe.getMessage()); + return false; + } + } + + final class DataViewer implements Runnable { + Shell shell; + boolean isSaved; + Data theData; + File theFile = getTempFile(); + Converter[] theConverters; + + DataViewer (Shell parentShell, Data data, Converter[] converters){ + this.shell = parentShell; + this.theData = data; + this.theConverters = converters; + } + + public void run() { + // lots of persisters found, return the chooser + ViewDataChooser vdc = new ViewDataChooser("View", theFile, shell, + theData, theConverters, context); + vdc.open(); + isSaved = vdc.isSaved(); + } + } + + + + +} \ No newline at end of file Added: trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/FileViewFactory.java =================================================================== --- trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/FileViewFactory.java (rev 0) +++ trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/FileViewFactory.java 2006-10-11 20:44:18 UTC (rev 267) @@ -0,0 +1,35 @@ +package org.cishell.reference.gui.persistence.view; + +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 FileViewFactory 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 FileView(data, parameters, context); + } + public MetaTypeProvider createParameters(Data[] data) { +// return provider; + return null; + } +} \ No newline at end of file Added: trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/ViewDataChooser.java =================================================================== --- trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/ViewDataChooser.java (rev 0) +++ trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/ViewDataChooser.java 2006-10-11 20:44:18 UTC (rev 267) @@ -0,0 +1,44 @@ +package org.cishell.reference.gui.persistence.view; + +import java.io.File; + +import org.cishell.framework.CIShellContext; +import org.cishell.framework.data.Data; +import org.cishell.reference.gui.persistence.save.SaveDataChooser; +import org.cishell.service.conversion.Converter; + +import org.eclipse.swt.widgets.Shell; + +/* + * @author Weixia(Bonnie) Huang (hu...@in...) + * + */ +public class ViewDataChooser extends SaveDataChooser { + private File tempFile; + boolean isSaved = false; + Converter[] converters; + Data theData; + + public ViewDataChooser(String title, File tempFile, Shell parent, + Data data, Converter[] converters, CIShellContext context){ + super (data, parent, converters, title, context); + + this.tempFile = tempFile; + this.converters = converters; + this.theData = data; + } + + protected void selectionMade(int selectedIndex) { + getShell().setVisible(false); + final Converter converter = converterArray[selectedIndex]; + Data newData = converter.convert(theData); + isSaved = FileView.copy((File)newData.getData(), tempFile); + close(true); + } + + public boolean isSaved(){ + return isSaved; + } + + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bea...@us...> - 2006-10-13 17:19:06
|
Revision: 272 http://svn.sourceforge.net/cishell/?rev=272&view=rev Author: bearsfan Date: 2006-10-13 10:18:53 -0700 (Fri, 13 Oct 2006) Log Message: ----------- Checked for current thread, and debug print outs in the save plugin. Modified Paths: -------------- trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/load/FileLoad.java trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/save/Save.java trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/save/SaveDataChooser.java Modified: trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/load/FileLoad.java =================================================================== --- trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/load/FileLoad.java 2006-10-11 20:54:35 UTC (rev 271) +++ trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/load/FileLoad.java 2006-10-13 17:18:53 UTC (rev 272) @@ -61,7 +61,13 @@ Display display = PlatformUI.getWorkbench().getDisplay(); DataUpdater dataUpdater = new DataUpdater (windows[0]); - display.syncExec(dataUpdater); + + if (Thread.currentThread() != display.getThread()) { + display.syncExec(dataUpdater); + } else { + dataUpdater.run(); + } + if (!dataUpdater.returnList.isEmpty()){ int size = dataUpdater.returnList.size(); returnDM = new Data[size]; Modified: trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/save/Save.java =================================================================== --- trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/save/Save.java 2006-10-11 20:54:35 UTC (rev 271) +++ trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/save/Save.java 2006-10-13 17:18:53 UTC (rev 272) @@ -1,6 +1,8 @@ package org.cishell.reference.gui.persistence.save; import java.util.Dictionary; +import java.util.Set; +import java.util.TreeSet; import org.cishell.framework.CIShellContext; import org.cishell.framework.algorithm.Algorithm; @@ -10,6 +12,8 @@ import org.cishell.service.guibuilder.GUIBuilderService; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.PlatformUI; +import org.osgi.framework.Constants; +import org.osgi.framework.ServiceReference; /** * Save algorithm for persisting a data object @@ -55,6 +59,19 @@ //This only checks the first Data in the array final Converter[] converters = conversionManager.findConverters(data[0], "file-ext:*"); + Set conversionSet = new TreeSet(); + for (int i=0; i < converters.length; i++) { + if (!conversionSet.contains(converters[i])) { + conversionSet.add(converters[i]); + + ServiceReference[] refs = converters[i].getConverterChain(); + for (int j=0; j < refs.length; j++) { + System.out.print(refs[j].getProperty(Constants.SERVICE_PID+"->")); + } + + } + } + if (converters.length < 1) { guiBuilder.showError("No Converters", "No valid converters for data type: " + Modified: trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/save/SaveDataChooser.java =================================================================== --- trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/save/SaveDataChooser.java 2006-10-11 20:54:35 UTC (rev 271) +++ trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/save/SaveDataChooser.java 2006-10-13 17:18:53 UTC (rev 272) @@ -12,6 +12,7 @@ import org.cishell.framework.CIShellContext; import org.cishell.framework.algorithm.AlgorithmProperty; import org.cishell.framework.data.Data; +import org.cishell.reference.gui.common.AbstractDialog; import org.cishell.service.conversion.Converter; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyleRange; @@ -29,8 +30,6 @@ import org.eclipse.swt.widgets.List; import org.eclipse.swt.widgets.Shell; -import org.cishell.reference.gui.common.AbstractDialog; - /** * SaveDataChooser is a simple user interface to allow for selection * among several Persisters that support the selected model, in the event @@ -118,26 +117,32 @@ */ private void initConverterList() { for (int i = 0; i < converterArray.length; ++i) { - Dictionary dict = converterArray[i].getProperties(); + if (converterArray[i] != null) { + Dictionary dict = converterArray[i].getProperties(); - // get the name of the persister from the property map - String outData = (String) dict.get(AlgorithmProperty.LABEL); + // get the name of the persister from the property map + String outData = (String) dict.get(AlgorithmProperty.LABEL); - // if someone was sloppy enough to not provide a name, then use the - // name of the class instead. - if ((outData == null) || (outData.length() == 0)) { - outData = converterArray[i].getClass().getName(); - } + // if someone was sloppy enough to not provide a name, then use + // the + // name of the class instead. + if ((outData == null) || (outData.length() == 0)) { + outData = converterArray[i].getClass().getName(); + } - converterList.add(outData); - } + converterList.add(outData); + } + } } /** - * Sets up the DetailPane where the details from the Persister PropertyMaps are displayed. - * @param detailsGroup The detail pane to init - * @return A style of the text - */ + * Sets up the DetailPane where the details from the Persister PropertyMaps + * are displayed. + * + * @param detailsGroup + * The detail pane to init + * @return A style of the text + */ private StyledText initDetailPane(Group detailsGroup) { StyledText detailPane = new StyledText(detailsGroup, SWT.H_SCROLL | SWT.V_SCROLL); detailPane.setEditable(false); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bh...@us...> - 2006-10-16 20:40:48
|
Revision: 286 http://svn.sourceforge.net/cishell/?rev=286&view=rev Author: bh2 Date: 2006-10-16 13:40:27 -0700 (Mon, 16 Oct 2006) Log Message: ----------- put a bandaid on the persistence plugin. This code needs cleaned up B-A-D! Modified Paths: -------------- trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/load/LoadDataChooser.java trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/save/Save.java Modified: trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/load/LoadDataChooser.java =================================================================== --- trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/load/LoadDataChooser.java 2006-10-16 19:42:12 UTC (rev 285) +++ trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/load/LoadDataChooser.java 2006-10-16 20:40:27 UTC (rev 286) @@ -6,9 +6,14 @@ */ package org.cishell.reference.gui.persistence.load; +import java.io.File; import java.util.ArrayList; -import java.io.File; +import org.cishell.framework.CIShellContext; +import org.cishell.framework.algorithm.AlgorithmFactory; +import org.cishell.framework.data.BasicData; +import org.cishell.framework.data.Data; +import org.cishell.reference.gui.common.AbstractDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyleRange; import org.eclipse.swt.custom.StyledText; @@ -22,18 +27,10 @@ import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.List; import org.eclipse.swt.widgets.Shell; - import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; import org.osgi.service.log.LogService; -import org.cishell.framework.CIShellContext; -import org.cishell.framework.algorithm.AlgorithmFactory; -import org.cishell.framework.data.BasicData; -import org.cishell.framework.data.Data; - -import org.cishell.reference.gui.common.AbstractDialog; - /** * * @author Team IVC (Weixia Huang, James Ellis) @@ -162,15 +159,25 @@ } private void selectionMade(int selectedIndex) { - - logger.log(LogService.LOG_INFO, "Loaded: "+theFile.getPath()); AlgorithmFactory persister =(AlgorithmFactory) bContext.getService(persisterArray[selectedIndex]); - Data[] dm = new Data[]{new BasicData(theFile.getPath(),String.class.getName())}; - dm = persister.createAlgorithm(dm, null, ciContext).execute(); - for(int i = 0; i<dm.length; i++){ - returnList.add(dm[i]); - } - close(true); + Data[] dm = null; + try { + dm = new Data[]{new BasicData(theFile.getPath(),String.class.getName())}; + dm = persister.createAlgorithm(dm, null, ciContext).execute(); + } catch (Throwable e) { + e.printStackTrace(); + } + + if (dm != null) { + logger.log(LogService.LOG_INFO, "Loaded: "+theFile.getPath()); + + for(int i = 0; i<dm.length; i++){ + returnList.add(dm[i]); + } + close(true); + } else { + logger.log(LogService.LOG_ERROR, "Unable to load with selected loader"); + } } public void createDialogButtons(Composite parent) { Modified: trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/save/Save.java =================================================================== --- trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/save/Save.java 2006-10-16 19:42:12 UTC (rev 285) +++ trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/save/Save.java 2006-10-16 20:40:27 UTC (rev 286) @@ -8,6 +8,7 @@ import org.cishell.service.conversion.Converter; import org.cishell.service.conversion.DataConversionService; import org.cishell.service.guibuilder.GUIBuilderService; +import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.PlatformUI; @@ -63,17 +64,30 @@ } else { if (!parentShell.isDisposed()) { - parentShell.getDisplay().syncExec(new Runnable() { + guiRun(new Runnable() { public void run() { - SaveDataChooser sdc = new SaveDataChooser(data[0], - parentShell, converters, - "Save", - context); - sdc.createContent(parentShell); - sdc.open(); + if (converters.length == 1) { + final FileSaver saver = new FileSaver(parentShell, context); + saver.save(converters[0], data[0]); + } else { + SaveDataChooser sdc = new SaveDataChooser(data[0], + parentShell, converters, + "Save", + context); + sdc.createContent(new Shell(parentShell)); + sdc.open(); + } }}); } } return null; } + + private void guiRun(Runnable run) { + if (Thread.currentThread() == Display.getDefault().getThread()) { + run.run(); + } else { + parentShell.getDisplay().syncExec(run); + } + } } \ 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: <mwl...@us...> - 2008-01-23 15:24:51
|
Revision: 600 http://cishell.svn.sourceforge.net/cishell/?rev=600&view=rev Author: mwlinnem Date: 2008-01-23 07:24:44 -0800 (Wed, 23 Jan 2008) Log Message: ----------- We now only show one menu choice per file format when saving or viewing. Also, menu choices are now alphabetized. Modified Paths: -------------- trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/save/Save.java trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/save/SaveDataChooser.java trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/ViewDataChooser.java trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/viewwith/ViewWithDataChooser.java Modified: trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/save/Save.java =================================================================== --- trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/save/Save.java 2008-01-18 17:49:49 UTC (rev 599) +++ trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/save/Save.java 2008-01-23 15:24:44 UTC (rev 600) @@ -57,7 +57,7 @@ public Data[] execute() { //This only checks the first Data in the array final Converter[] converters = conversionManager.findConverters(data[0], "file-ext:*"); - + if (converters.length < 1 && !(data[0].getData() instanceof File)) { guiBuilder.showError("No Converters", "No valid converters for data type: " + Modified: trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/save/SaveDataChooser.java =================================================================== --- trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/save/SaveDataChooser.java 2008-01-18 17:49:49 UTC (rev 599) +++ trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/save/SaveDataChooser.java 2008-01-23 15:24:44 UTC (rev 600) @@ -6,8 +6,12 @@ */ package org.cishell.reference.gui.persistence.save; +import java.util.Arrays; +import java.util.Comparator; import java.util.Dictionary; import java.util.Enumeration; +import java.util.HashMap; +import java.util.Map; import org.cishell.framework.CIShellContext; import org.cishell.framework.algorithm.AlgorithmProperty; @@ -38,7 +42,7 @@ * * @author Team IVC */ -public class SaveDataChooser extends AbstractDialog { +public class SaveDataChooser extends AbstractDialog implements AlgorithmProperty { protected Data data; protected Converter[] converterArray; private List converterList; @@ -61,7 +65,7 @@ String title, CIShellContext context) { super(parent, title, QUESTION); this.data = data; - this.converterArray = converterArray; + this.converterArray = alphabetizeConverters(filterConverters(converterArray)); this.context = context; } @@ -187,6 +191,117 @@ detailPane.append(val + "\n"); } } + + /** + * In allConverters, there are sometimes more than one + * that converts to a single data type. When the + * chooser pops up, this is confusing to the user, since it + * will, for instance, display two 'Pajek.net' choices. + * + * This method attempts to choose the best converter for each + * out_data format, choosing based on lossiness primarily, and + * length of converter chain secondarily. + * @param allConverters All the converters starting with + * the original file's data type (that is, any type in its class heirarchy) + * and ending in a file format. + * @return allConverters, with redudant out file formats removed. + */ + private Converter[] filterConverters(Converter[] allConverters) { + Map lastInDataToConverter = new HashMap(); + + for (int i = 0; i < allConverters.length; i++) { + Converter converter = allConverters[i]; + + + + //for .xml files, to uniquely identify it + //we need to know what kind of xml it was + //so we look at the in_data type of the + //last converter + String lastInData = getLastConverterInData(converter); + + //if we already have a converter with this out data type... + if (lastInDataToConverter.containsKey(lastInData)) { + Converter alreadyStoredConverter = (Converter) lastInDataToConverter.get(lastInData); + + Converter chosenConverter = returnPreferredConverter(converter,alreadyStoredConverter); + + lastInDataToConverter.put(lastInData, chosenConverter); + } else { + lastInDataToConverter.put(lastInData, converter); + } + } + + return (Converter[]) lastInDataToConverter.values().toArray(new Converter[0]); + } + + private String getLastConverterInData(Converter converter) { + ServiceReference[] convChain = converter.getConverterChain(); + if (convChain.length >= 1) { + ServiceReference lastConv = convChain[convChain.length - 1]; + + String lastInData = (String) lastConv.getProperty("in_data"); + + return lastInData; + } else { + return ""; + } + } + + /** + * Returns whichever converter is better to show to the user in the chooser, + * based on lossiness, and length of converter chain + * @param c1 A converter with the same out_data type as the other + * @param c2 A converter with the same out_data type as the other + * @return The preferred converter of the two + */ + private Converter returnPreferredConverter(Converter c1, Converter c2) { + Dictionary c1Dict = c1.getProperties(); + String c1Lossiness = (String) c1Dict.get(CONVERSION); + int c1Quality = determineQuality(c1Lossiness); + + + + Dictionary c2Dict = c2.getProperties(); + String c2Lossiness = (String) c2Dict.get(CONVERSION); + int c2Quality = determineQuality(c2Lossiness); + + if (c1Quality > c2Quality) { + return c1; + } else if (c2Quality > c1Quality) { + return c2; + } else { + //they are tied. Look at converter chain length + + int c1Length = c1.getConverterChain().length; + int c2Length = c2.getConverterChain().length; + //return the shortest + if (c1Length > c2Length) { + return c2; + } else if (c2Length > c1Length) { + return c1; + } else { + //both have the same lossiness and same length + //arbitrary pick the first + return c1; + } + } + } + + private int determineQuality(String lossiness) { + if (lossiness == LOSSY) { + return 0; + } else if (lossiness == null) { + return 1; + } else { //lossiness == LOSSLESS + return 2; + } + } + + private Converter[] alphabetizeConverters(Converter[] cs) { + Arrays.sort(cs, new CompareAlphabetically()); + return cs; + } /** * When a Persister is chosen to Persist this model, this method handles the job @@ -244,4 +359,33 @@ return initGUI(parent); } } + + private class CompareAlphabetically implements Comparator { + + public int compare(Object o1, Object o2) { + if (o1 instanceof Converter && o2 instanceof Converter) { + Converter c1 = (Converter) o1; + String c1Label = getLabel(c1); + + Converter c2 = (Converter) o2; + String c2Label = getLabel(c2); + + return c1Label.compareTo(c2Label); + } else { + throw new IllegalArgumentException("Can only " + + "compare Converters"); + } + } + + private String getLabel(Converter c) { + String label = ""; + ServiceReference[] refs = c.getConverterChain(); + if (refs != null && refs.length > 0) { + label = (String) refs[refs.length-1].getProperty( + AlgorithmProperty.LABEL); + } + + return label; + } + } } Modified: trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/ViewDataChooser.java =================================================================== --- trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/ViewDataChooser.java 2008-01-18 17:49:49 UTC (rev 599) +++ trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/view/ViewDataChooser.java 2008-01-23 15:24:44 UTC (rev 600) @@ -16,7 +16,6 @@ public class ViewDataChooser extends SaveDataChooser { private File tempFile; boolean isSaved = false; - Converter[] converters; Data theData; public ViewDataChooser(String title, File tempFile, Shell parent, @@ -24,7 +23,6 @@ super (data, parent, converters, title, context); this.tempFile = tempFile; - this.converters = converters; this.theData = data; } Modified: trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/viewwith/ViewWithDataChooser.java =================================================================== --- trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/viewwith/ViewWithDataChooser.java 2008-01-18 17:49:49 UTC (rev 599) +++ trunk/clients/gui/org.cishell.reference.gui.persistence/src/org/cishell/reference/gui/persistence/viewwith/ViewWithDataChooser.java 2008-01-23 15:24:44 UTC (rev 600) @@ -16,7 +16,6 @@ public class ViewWithDataChooser extends SaveDataChooser { private File tempFile; boolean isSaved = false; - Converter[] converters; Data theData; public ViewWithDataChooser(String title, File tempFile, Shell parent, @@ -24,7 +23,6 @@ super (data, parent, converters, title, context); this.tempFile = tempFile; - this.converters = converters; this.theData = data; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |