+ /**
+ * Extract properties from the uploaded file.
+ *
+ * @param upfile
+ * the file to parse
+ * @param filext
+ * the file extension
+ * @return true if succeeded, false if error
+ */
+ private boolean extractProperties(final File upfile, final String filext) {
+ boolean isOk = true;
+ Reader tool = Toolbox.getReader(upfile);
+ if (tool == null) {
+ if ("pdf".equals(filext)) {
+ _state = ProgressState.EXTERN; // TODO: Should external extensions be configurable ?
+ }
+ } else {
+ // String fileref = tool.extractProperty("reference");
+ // String filever = tool.extractProperty("version"); // Property kept even if the file is not referenced
+ // String filetype = tool.extractProperty("type"); // Property kept even if the file is not referenced
+ // for (Iterator<DocumentType> i = _documentTypes.iterator(); i
+ // .hasNext();) {
+ // DocumentType type = i.next();
+ // if (type.getName().equals(filetype)) {
+ // _deftype = type;
+ // _documentType = type.getIndex(); // Disables the document type field
+ // break;
+ // }
+ // }
+ // if (fileref != null) {
+ // isOk = findTypeByDocRef(fileref);
+ // }
+ // if (isOk) {
+ // if (filever != null) {
+ // try {
+ // Revision.Format get = new Revision.Format(
+ // getProjectSettings().getRevisionPattern());
+ // Revision version = get.parse(filever);
+ // if (version.isNull()) {
+ // throw new ParseException(filever,
+ // filever.length() - 1);
+ // }
+ // if (!version.isMinor()) {
+ // _state = ProgressState.inCHECK;
+ // }
+ // setVersion(version.toString());
+ // } catch (ParseException e) {
+ // setErrorCode("message.error.format.version");
+ // isOk = false;
+ // }
+ // }
+ // if (isOk) {
+ // _docname = tool.extractProperty("title"); // Property kept even if the file is not referenced
+ // isOk = extractDate(tool);
+ // }
+ // }
+ }
+ return isOk;
+ }
+
+ /**
+ * Find document type by document reference.
+ *
+ * @param fileref
+ * the document reference
+ * @return true if succeeded, false if error
+ */
+ private boolean findTypeByDocRef(final String fileref) {
+ boolean isOk = true;
+ Document slot = getDocumentService().selectDocument(fileref,
+ new Revision().toString());
+ if (slot == null) {
+ setError("message.error.reference.undefined");
+ isOk = false;
+ } else {
+ if (slot.isUndefined()) {
+ _reference = fileref; // Disables document name and state fields
+ _deftype = slot.getType(); // Just in case
+ _documentType = _deftype.getIndex(); // Disables the document type field
+ } else {
+ setError("message.error.reference.duplicate");
+ isOk = false;
+ }
+ }
+ return isOk;