/** * Returns the collection of attachments. * * @return See above. */ List<FileAnnotationData> removeAttachedFiles() { List<FileAnnotationData> list = new ArrayList<FileAnnotationData>(); if (filesDocList.size() == 0) { docFlag = false; return list; } List<FileAnnotationData> toKeep = new ArrayList<FileAnnotationData>(); FileAnnotationData data; DocComponent doc; Object object; Iterator<DocComponent> i = filesDocList.iterator(); while (i.hasNext()) { doc = i.next(); object = doc.getData(); if (doc.canUnlink()) { if (object instanceof FileAnnotationData) { data = (FileAnnotationData) object; if (data.getId() > 0) list.add(data); } } else { toKeep.add((FileAnnotationData) object); } } handleObjectsSelection(FileAnnotationData.class, toKeep, false); if (list.size() == 0) docFlag = false; return list; }
/** * Starts an asynchronous call to save the passed file back to the server. * * @param file The file to save. * @param asynch Pass <code>true</code> to save asynchronously, <code>false</code> otherwise. */ void fireFileSaving(File file, boolean asynch) { boolean fileIsExp = browser.isModelExperiment(); int fileType = (fileIsExp ? FileSaver.EXPERIMENT : FileSaver.PROTOCOL); saveFile(file); FileAnnotationData data = null; DataObject linkTo = parent; if (fileAnnotation != null) data = fileAnnotation; else data = new FileAnnotationData(file); if (data.getId() > 0) linkTo = null; String description = CPEsummaryExport.export(browser.getTreeModel()); if (description != null) data.setDescription(description); if (asynch) { currentLoader = new FileSaver(component, ctx, file, data, fileType, linkTo); currentLoader.load(); state = Editor.SAVING; } else { OmeroMetadataService svc = EditorAgent.getRegistry().getMetadataService(); try { svc.archivedFile(ctx, fileAnnotation, file, fileType, linkTo); } catch (Exception e) { LogMessage msg = new LogMessage(); msg.print("State: " + state); msg.print("Cannot save file back to server"); msg.print(e); EditorAgent.getRegistry().getLogger().error(this, msg); } } }
/** * Attaches the passed file. Returns <code>true</code> if the file does not already exist, <code> * false</code> otherwise. * * @param files The files to attach. * @return See above */ boolean attachFiles(File[] files) { List<FileAnnotationData> list = getCurrentAttachmentsSelection(); DocComponent doc; List<File> toAdd = new ArrayList<File>(); Object data = null; if (filesDocList.size() > 0) { Iterator<DocComponent> i = filesDocList.iterator(); FileAnnotationData fa; while (i.hasNext()) { doc = i.next(); data = doc.getData(); if (data instanceof FileAnnotationData) { fa = (FileAnnotationData) data; /* for (int j = 0; j < files.length; j++) { if (fa.getId() <= 0) { if (!fa.getFilePath().equals( files[j].getAbsolutePath())) toAdd.add(files[j]); list.add(fa); } else { if (fa.getFileName().equals(files[j].getName())) { toReplace.add(fa); } else toAdd.add(files[j]); } } */ for (int j = 0; j < files.length; j++) { if (fa.getId() >= 0 && fa.getFileName().equals(files[j].getName())) { toReplace.add(fa); } } } } } // if (data == null) { for (int i = 0; i < files.length; i++) { toAdd.add(files[i]); } // } if (toAdd.size() > 0) { data = null; try { docFlag = true; Iterator<File> j = toAdd.iterator(); while (j.hasNext()) { list.add(new FileAnnotationData(j.next())); } } catch (Exception e) { } firePropertyChange( EditorControl.SAVE_PROPERTY, Boolean.valueOf(false), Boolean.valueOf(true)); } layoutAttachments(list); return toAdd.size() > 0; }
/** * Handles the selection of objects via the selection wizard. * * @param type The type of objects to handle. * @param objects The objects to handle. * @param fire Pass <code>true</code> to notify, <code>false</code> otherwise. */ void handleObjectsSelection(Class type, Collection objects, boolean fire) { if (objects == null) return; if (TagAnnotationData.class.equals(type)) { layoutTags(objects); List<Long> ids = new ArrayList<Long>(); Iterator i = objects.iterator(); TagAnnotationData tag; tagFlag = false; Collection tags = model.getTags(); if (tags == null || tags.size() != objects.size()) { tagFlag = true; } else { while (i.hasNext()) { tag = (TagAnnotationData) i.next(); if (tag != null && !model.isAnnotationUsedByUser(tag)) { ids.add(tag.getId()); } } i = tags.iterator(); while (i.hasNext()) { tag = (TagAnnotationData) i.next(); if (tag != null && !ids.contains(tag.getId())) { tagFlag = true; break; } } } } else if (FileAnnotationData.class.equals(type)) { layoutAttachments(objects); List<Long> ids = new ArrayList<Long>(); Iterator i = objects.iterator(); FileAnnotationData data; docFlag = false; Collection attachments = model.getAttachments(); if (attachments == null || attachments.size() != objects.size()) { docFlag = true; } else { while (i.hasNext()) { data = (FileAnnotationData) i.next(); if (data != null) ids.add(data.getId()); } i = attachments.iterator(); while (i.hasNext()) { data = (FileAnnotationData) i.next(); if (data != null && !ids.contains(data.getId())) { docFlag = true; break; } } } } buildGUI(); if (fire) firePropertyChange( EditorControl.SAVE_PROPERTY, Boolean.valueOf(false), Boolean.valueOf(true)); }
/** * Sets the file annotation data. * * @param data The value to set. */ void setFileAnnotationData(FileAnnotationData data) { fileAnnotation = data; if (data == null) { fileID = 0; fileName = null; nameSpace = null; return; } this.fileID = data.getFileID(); this.fileName = data.getFileName(); nameSpace = data.getNameSpace(); }
/** * Modifies the text of the component. * * @see ActivityComponent#notifyActivityEnd() */ protected void notifyActivityEnd() { // Download the file. if (result instanceof FileAnnotationData) { FileAnnotationData data = (FileAnnotationData) result; String name = ""; if (data.isLoaded()) name = data.getFileName(); else name = "Annotation_" + data.getId(); download("", result, new File(parameters.getFolder(), name)); } type.setText(DESCRIPTION_CREATED + " " + parameters.getFolder().getName()); }
/** * Returns the instrument transfer function linked to the edited object. * * @return See above */ FileAnnotationData getIRF() { if (!(refObject instanceof ImageData)) return null; if (data == null) return null; Collection<FileAnnotationData> l = getStructuredData().getAttachments(); if (l == null || l.size() == 0) return null; Iterator<FileAnnotationData> i = l.iterator(); FileAnnotationData fa; while (i.hasNext()) { fa = i.next(); if (fa.getFileName().contains("irf")) return fa; } return null; }
/** * Creates a new instance. * * @param viewer The viewer this data loader is for. Mustn't be <code>null</code>. * @param data The annotation hosting the file to load. * @param uiView The object to handle. */ public FileLoader(Editor viewer, FileAnnotationData data, Object uiView) { super(viewer); if (data == null) throw new IllegalArgumentException("No data set."); this.data = data; this.uiView = uiView; file = new File(MetadataViewerAgent.getTmpDir() + File.separator + data.getFileName()); file.deleteOnExit(); }
/** * Returns the list of attachments currently selected by the user. * * @return See above. */ List<FileAnnotationData> getCurrentAttachmentsSelection() { List<FileAnnotationData> list = new ArrayList<FileAnnotationData>(); if (filesDocList.size() == 0) return list; DocComponent doc; Object object; FileAnnotationData data; Iterator<DocComponent> i = filesDocList.iterator(); while (i.hasNext()) { doc = i.next(); object = doc.getData(); if (object instanceof FileAnnotationData) { data = (FileAnnotationData) object; if (data.getId() > 0) list.add(data); } } return list; }
/** * Returns the collection of the attachments linked to the <code>DataObject</code>. * * @return See above. */ private List<FileAnnotationData> getTabularData() { StructuredDataResults data = getStructuredData(); List<FileAnnotationData> l = new ArrayList<FileAnnotationData>(); if (data == null) return l; Collection<FileAnnotationData> attachments = data.getAttachments(); if (attachments == null) return l; Iterator<FileAnnotationData> i = attachments.iterator(); FileAnnotationData f; String ns; while (i.hasNext()) { f = i.next(); ns = f.getNameSpace(); if (FileAnnotationData.BULK_ANNOTATIONS_NS.equals(ns)) { l.add(f); } } return l; }
/** * Starts the asynchronous loading of the file to edit. and sets the state to {@link * Editor#LOADING}. */ void fireFileLoading() { long size = 0; if (fileAnnotation != null) size = fileAnnotation.getFileSize(); // fileID can be annotationID if fileName is null // E.g. if EditorModel(long annotationID) was the constructor. currentLoader = new FileLoader(component, ctx, fileName, fileID, size); currentLoader.load(); state = Editor.LOADING; }
/** * Removes the passed file from the display. * * @param file The file to remove. */ void removeAttachedFile(Object file) { if (file == null) return; FileAnnotationData fData = (FileAnnotationData) file; List<FileAnnotationData> attachments = getCurrentAttachmentsSelection(); Iterator<FileAnnotationData> i = attachments.iterator(); FileAnnotationData data; List<FileAnnotationData> toKeep = new ArrayList<FileAnnotationData>(); while (i.hasNext()) { data = i.next(); if (data.getId() != fData.getId()) toKeep.add(data); } if (filesDocList.size() > 0) { Iterator<DocComponent> j = filesDocList.iterator(); DocComponent doc; Object fa; while (j.hasNext()) { doc = j.next(); fa = doc.getData(); if (fa instanceof FileAnnotationData) { data = (FileAnnotationData) fa; if (data.getId() <= 0 && !data.equals(file)) { toKeep.add(data); } } } } handleObjectsSelection(FileAnnotationData.class, toKeep, true); }
/** * Downloads the file. * * @see EditorLoader#cancel() */ public void load() { if (data != null) { OriginalFile f = ((FileAnnotation) data.asAnnotation()).getFile(); if (f.isLoaded()) { handle = mhView.loadFile(file, f.getId().getValue(), f.getSize().getValue(), this); } } else { Entry entry; Iterator i = files.entrySet().iterator(); FileAnnotationData fa; filesMap = new HashMap<FileAnnotationData, File>(files.size()); File f; // int index = 0; String dir = MetadataViewerAgent.getTmpDir(); while (i.hasNext()) { entry = (Entry) i.next(); fa = (FileAnnotationData) entry.getKey(); f = new File(dir + File.separator + fa.getFileID() + "_" + fa.getFileName()); f.deleteOnExit(); filesMap.put(fa, f); } handle = mhView.loadFiles(filesMap, this); } }
/** * Gets a reference to the Original File if this file has been saved to the server. Otherwise * returns 0. * * @return See above */ long getAnnotationId() { if (fileAnnotation == null) return annotationID; return fileAnnotation.getId(); }
/** * Returns the collection of annotation to remove. * * @see AnnotationUI#getAnnotationToRemove() */ protected List<Object> getAnnotationToRemove() { List<Object> l = new ArrayList<Object>(); if (selectedValue != initialValue && selectedValue == 0) { RatingAnnotationData rating = model.getUserRatingAnnotation(); if (rating != null) l.add(rating); } List<Long> idsToKeep; DocComponent doc; long id; Object object; Iterator<DocComponent> i; Collection original; Iterator j; if (tagFlag && !model.isMultiSelection()) { idsToKeep = new ArrayList<Long>(); TagAnnotationData tag; i = tagsDocList.iterator(); while (i.hasNext()) { doc = i.next(); object = doc.getData(); if (object instanceof TagAnnotationData) { tag = (TagAnnotationData) object; id = tag.getId(); if (id > 0) idsToKeep.add(id); } } original = model.getTags(); j = original.iterator(); while (j.hasNext()) { tag = (TagAnnotationData) j.next(); id = tag.getId(); if (!idsToKeep.contains(id)) // && model.isAnnotationToDelete(tag)) l.add(tag); } } if (docFlag) { idsToKeep = new ArrayList<Long>(); i = filesDocList.iterator(); FileAnnotationData fa; while (i.hasNext()) { doc = i.next(); object = doc.getData(); if (object instanceof FileAnnotationData) { fa = (FileAnnotationData) object; id = fa.getId(); if (id > 0) idsToKeep.add(id); } } original = model.getAttachments(); j = original.iterator(); while (j.hasNext()) { fa = (FileAnnotationData) j.next(); id = fa.getId(); if (!idsToKeep.contains(id)) // && model.isAnnotationToDelete(fa)) l.add(fa); } } if (model.hasBeenPublished()) { if (!publishedBox.isSelected()) { BooleanAnnotationData b = model.getPublishedAnnotation(); if (b.getValue().booleanValue()) l.add(b); } } return l; }