Search in sources :

Example 6 with DictValue

use of edu.cmu.cs.hcii.cogtool.model.ISimilarityDictionary.DictValue in project cogtool by cogtool.

the class DictionaryEditorCmd method importDictionary.

/**
     * Replace prevDict with dict after reading the entries from the file.
     * @param csvFile TODO
     */
// I (dfm) believe the above is a lie. I think prevDict was already replaced 
// by dict by the caller, and prevDict is simply a vestigal bit of data that
// is passed around and encapsulated in undo and redo forms for no reason
// at all. But I'm not sufficiently confident of that diagnosis to zap it
// just yet....
public static boolean importDictionary(final Design design, final ISimilarityDictionary dict, final ISimilarityDictionary prevDict, Interaction interaction, IUndoableEditSequence editSeq, String csvFile) {
    File dataFile = (csvFile != null ? new File(csvFile) : interaction.selectCSVFile());
    if (dataFile == null) {
        return false;
    }
    FileReader reader = null;
    List<String> outputLines = new ArrayList<String>();
    try {
        reader = new FileReader(dataFile);
        FileUtil.readLines(reader, outputLines);
    } catch (IOException e) {
        interaction.reportProblem("File I/O Error", e.getMessage());
        return false;
    } finally {
        try {
            if (reader != null) {
                reader.close();
            }
        } catch (IOException e) {
            interaction.reportProblem("File I/O Error on Close", e.getMessage());
            return false;
        }
    }
    if (outputLines.size() == 0) {
        interaction.reportProblem("Empty file", "Requested .csv file is empty");
        return false;
    }
    if (outputLines.size() < 3) {
        interaction.reportProblem("Invalid file", "Requested file is not a valid dictionary file");
        return false;
    }
    String[] headerCol = CSVSupport.getCells(outputLines.get(0));
    if ((headerCol.length != 2) || !(ISimilarityDictionary.COGTOOL_DICT_HEADER.equals(headerCol[0])) || !headerCol[1].equals(DICT_CSV_VERSION_0)) {
        interaction.reportProblem("Invalid file", "Requested file is not a valid dictionary file");
        return false;
    }
    final Map<DictEntry, DictValue> newEntries = new LinkedHashMap<DictEntry, DictValue>();
    for (int i = 2; i < outputLines.size(); i++) {
        String newLine = outputLines.get(i);
        String[] cols = CSVSupport.getCells(newLine);
        // [required] 0 is goal string
        // [required] 1 is search string
        // [required] 2 is algorithm name
        // [optional] 3 is site (for Google algs) or url (for LSA)
        // [optional] 4 is term space (for LSA)
        String site = (cols.length > 3) ? cols[3] : "";
        String space = (cols.length > 4) ? cols[4] : "";
        DictEntry entry = new DictEntry(cols[0], cols[1], getNameAlgorithm(cols[2], site, space));
        double similarity;
        Date editedDate;
        try {
            similarity = parseDouble(cols[4]);
            editedDate = new PersistentDate(PersistentDate.DATE_FORMAT.parse(cols[5]));
        } catch (Exception e) {
            throw new RcvrParsingException("Parsing error", e);
        }
        DictValue value = new DictValue(similarity, editedDate);
        newEntries.put(entry, value);
    }
    dict.insertEntries(newEntries, false);
    if (editSeq != null) {
        editSeq.addEdit(new AUndoableEdit(ProjectLID.ImportDict) {

            @Override
            public String getPresentationName() {
                return IMPORT_DICTIONARY;
            }

            @Override
            public void redo() {
                super.redo();
                if (!NullSafe.equals(prevDict, WidgetAttributes.NO_DICTIONARY)) {
                    design.setAttribute(WidgetAttributes.DICTIONARY_ATTR, dict);
                } else {
                    dict.insertEntries(newEntries, false);
                }
            }

            @Override
            public void undo() {
                super.undo();
                if (!NullSafe.equals(prevDict, WidgetAttributes.NO_DICTIONARY)) {
                    design.setAttribute(WidgetAttributes.DICTIONARY_ATTR, prevDict);
                } else {
                    dict.removeEntries(newEntries);
                }
            }
        });
    }
    if (interaction != null) {
        interaction.setStatusMessage("Import successful");
    }
    return true;
}
Also used : ArrayList(java.util.ArrayList) RcvrParsingException(edu.cmu.cs.hcii.cogtool.util.RcvrParsingException) IOException(java.io.IOException) PersistentDate(edu.cmu.cs.hcii.cogtool.util.PersistentDate) Date(java.util.Date) PersistentDate(edu.cmu.cs.hcii.cogtool.util.PersistentDate) RcvrParsingException(edu.cmu.cs.hcii.cogtool.util.RcvrParsingException) IOException(java.io.IOException) LinkedHashMap(java.util.LinkedHashMap) DictValue(edu.cmu.cs.hcii.cogtool.model.ISimilarityDictionary.DictValue) DictEntry(edu.cmu.cs.hcii.cogtool.model.ISimilarityDictionary.DictEntry) AUndoableEdit(edu.cmu.cs.hcii.cogtool.util.AUndoableEdit) FileReader(java.io.FileReader) File(java.io.File)

Example 7 with DictValue

use of edu.cmu.cs.hcii.cogtool.model.ISimilarityDictionary.DictValue in project cogtool by cogtool.

the class DictionaryEditorCmd method exportDictionaryToCSV.

public static boolean exportDictionaryToCSV(ISimilarityDictionary dictionary, Interaction interaction) {
    File dest = interaction.selectCSVFileDest(DEFAULT_DICT_PREFIX + "" + nextNewDictSuffix++);
    if (dest == null) {
        return false;
    }
    if (dictionary.size() == 0) {
        interaction.reportProblem("Export Dictionary", "Selected dictionary is empty");
        return true;
    }
    FileWriter fw = null;
    BufferedWriter buffer = null;
    try {
        fw = new FileWriter(dest);
        buffer = new BufferedWriter(fw);
        // first write out header, version, and column titles
        CSVSupport.writeCell(ISimilarityDictionary.COGTOOL_DICT_HEADER, buffer);
        CSVSupport.addSeparator(buffer);
        CSVSupport.writeCell(DICT_CSV_VERSION_0, buffer);
        CSVSupport.addLineEnding(buffer);
        CSVSupport.writeCell("Term", buffer);
        CSVSupport.addSeparator(buffer);
        CSVSupport.writeCell("Display Labels", buffer);
        CSVSupport.addSeparator(buffer);
        CSVSupport.writeCell("Algorithm", buffer);
        CSVSupport.addSeparator(buffer);
        CSVSupport.writeCell("Limiting URL", buffer);
        CSVSupport.addSeparator(buffer);
        CSVSupport.writeCell("Similarity", buffer);
        CSVSupport.addSeparator(buffer);
        CSVSupport.writeCell("Date computed", buffer);
        CSVSupport.addLineEnding(buffer);
        Iterator<DictEntry> values = dictionary.getEntries().iterator();
        while (values.hasNext()) {
            DictEntry entry = values.next();
            DictValue value = dictionary.getValue(entry);
            String url = "";
            if (entry.algorithm instanceof ISitedTermSimilarity) {
                url = ((ISitedTermSimilarity) entry.algorithm).getContextSite();
                if (url == null) {
                    url = "";
                }
            }
            String simil = toString(value.similarity);
            CSVSupport.writeCell(entry.goalWord, buffer);
            CSVSupport.addSeparator(buffer);
            CSVSupport.writeCell(entry.searchWord, buffer);
            CSVSupport.addSeparator(buffer);
            CSVSupport.writeCell(getAlgorithmName(entry.algorithm), buffer);
            CSVSupport.addSeparator(buffer);
            CSVSupport.writeCell(url, buffer);
            CSVSupport.addSeparator(buffer);
            CSVSupport.writeCell(simil, buffer);
            CSVSupport.addSeparator(buffer);
            CSVSupport.writeCell(value.editedDate.toString(), buffer);
            CSVSupport.addLineEnding(buffer);
        }
    } catch (IOException e) {
        interaction.reportProblem("File I/O Error", e.getMessage());
        return false;
    } finally {
        try {
            if (buffer != null) {
                buffer.close();
            }
            if (fw != null) {
                fw.close();
            }
        } catch (IOException e) {
            interaction.reportProblem("File I/O Error on Close", e.getMessage());
            return false;
        }
    }
    interaction.setStatusMessage("Export successful");
    return true;
}
Also used : DictValue(edu.cmu.cs.hcii.cogtool.model.ISimilarityDictionary.DictValue) FileWriter(java.io.FileWriter) DictEntry(edu.cmu.cs.hcii.cogtool.model.ISimilarityDictionary.DictEntry) IOException(java.io.IOException) ISitedTermSimilarity(edu.cmu.cs.hcii.cogtool.model.ISitedTermSimilarity) File(java.io.File) BufferedWriter(java.io.BufferedWriter)

Example 8 with DictValue

use of edu.cmu.cs.hcii.cogtool.model.ISimilarityDictionary.DictValue in project cogtool by cogtool.

the class DictionaryEditorController method createAddNewEntryAction.

protected IListenerAction createAddNewEntryAction() {
    return new IListenerAction() {

        public Class<?> getParameterClass() {
            return DictionaryEditorUI.ComputeSimilarityParms.class;
        }

        public boolean performAction(Object actionParms) {
            final DictionaryEditorUI.ComputeSimilarityParms parms = (DictionaryEditorUI.ComputeSimilarityParms) actionParms;
            final ITermSimilarity oldAlg = pendingEntry.getDictEntry().algorithm;
            final double oldSimilarity = pendingEntry.getSimilarity();
            final double similarity;
            if (checkNewEntry(parms.goalString, parms.searchString, parms.algorithm)) {
                interaction.reportProblem(ERROR_TITLE, ENTRY_EXISTS);
                return false;
            }
            if (parms.algorithm == ITermSimilarity.MANUAL) {
                similarity = oldSimilarity;
            } else {
                similarity = computeSimilarity(parms.goalString, parms.searchString, parms.algorithm);
            }
            final String oldGoal = pendingEntry.getDictEntry().goalWord;
            final String oldSearch = pendingEntry.getDictEntry().searchWord;
            pendingEntry.clear();
            final DictValue value = new DictValue(similarity);
            dictionary.setSimilarity(parms.goalString, parms.searchString, parms.algorithm, value, parms.rowIndex);
            undoMgr.addEdit(new AUndoableEdit(DictionaryEditorLID.CreateNewEntry) {

                @Override
                public String getPresentationName() {
                    return CREATE_ROW;
                }

                @Override
                public void redo() {
                    super.redo();
                    pendingEntry.clear();
                    dictionary.setSimilarity(parms.goalString, parms.searchString, parms.algorithm, value, parms.rowIndex);
                }

                @Override
                public void undo() {
                    super.undo();
                    dictionary.removeEntry(parms.rowIndex);
                    pendingEntry.setGoal(oldGoal);
                    pendingEntry.setSearch(oldSearch);
                    pendingEntry.setAlgorithm(oldAlg);
                    pendingEntry.setSimilarity(oldSimilarity);
                }
            });
            return true;
        }
    };
}
Also used : DictionaryEditorUI(edu.cmu.cs.hcii.cogtool.ui.DictionaryEditorUI) IListenerAction(edu.cmu.cs.hcii.cogtool.util.IListenerAction) ITermSimilarity(edu.cmu.cs.hcii.cogtool.model.ITermSimilarity) DictValue(edu.cmu.cs.hcii.cogtool.model.ISimilarityDictionary.DictValue) AUndoableEdit(edu.cmu.cs.hcii.cogtool.util.AUndoableEdit)

Aggregations

DictValue (edu.cmu.cs.hcii.cogtool.model.ISimilarityDictionary.DictValue)8 DictEntry (edu.cmu.cs.hcii.cogtool.model.ISimilarityDictionary.DictEntry)7 AUndoableEdit (edu.cmu.cs.hcii.cogtool.util.AUndoableEdit)4 PendingDictEntry (edu.cmu.cs.hcii.cogtool.ui.PendingDictEntry)3 File (java.io.File)3 IOException (java.io.IOException)3 ITermSimilarity (edu.cmu.cs.hcii.cogtool.model.ITermSimilarity)2 IListenerAction (edu.cmu.cs.hcii.cogtool.util.IListenerAction)2 BufferedWriter (java.io.BufferedWriter)2 ISitedTermSimilarity (edu.cmu.cs.hcii.cogtool.model.ISitedTermSimilarity)1 DictionaryEditorUI (edu.cmu.cs.hcii.cogtool.ui.DictionaryEditorUI)1 PersistentDate (edu.cmu.cs.hcii.cogtool.util.PersistentDate)1 RcvrParsingException (edu.cmu.cs.hcii.cogtool.util.RcvrParsingException)1 FileOutputStream (java.io.FileOutputStream)1 FileReader (java.io.FileReader)1 FileWriter (java.io.FileWriter)1 OutputStreamWriter (java.io.OutputStreamWriter)1 ArrayList (java.util.ArrayList)1 Date (java.util.Date)1 LinkedHashMap (java.util.LinkedHashMap)1