All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jcamp.spectrum.notes.NoteDescriptor Maven / Gradle / Ivy

Go to download

The JCAMP-DX project is the reference implemention of the IUPAC JCAMP-DX spectroscopy data standard.

The newest version!
package org.jcamp.spectrum.notes;

import java.io.Serializable;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Properties;
import java.util.StringTokenizer;

import org.jcamp.spectrum.ISpectrumIdentifier;
import org.jcamp.spectrum.Spectrum;
import org.jcamp.units.Unit;

/**
 * descriptor for spectrum notes.
 * 
 * @author Thomas Weber
 */
public class NoteDescriptor
  implements Cloneable, Serializable {
  
  /** for serialization. */
  private static final long serialVersionUID = -905943849901308127L;
  /**
   * default note content parser that supports basic Java types and Date.
   * @author Thomas Weber
   */
  private final static INoteContentParser DEFAULT_NOTECONTENT_PARSER = DefaultNoteContentParser.getInstance();
  private java.lang.Class fieldNoteContentClass = String.class;
  private INoteContentParser fieldNoteContentParser = DEFAULT_NOTECONTENT_PARSER;
  private Unit fieldUnit = null;
  private boolean fieldUnique = true;
  private boolean fieldDefault = false;
  private java.lang.String fieldName = new String();
  private java.lang.String fieldKey = new String();
  private static Hashtable notesDescriptors = new Hashtable();
  private java.lang.String fieldParentKey = null;
  private int fieldDeniedMask = 0;
  private int fieldAllowedMask = -1;
  public static NoteDescriptor TITLE;
  public static NoteDescriptor OWNER;
  public static NoteDescriptor ORIGIN;
  public static NoteDescriptor JCAMPDX;
  public static NoteDescriptor IGNORE;
  public static  java.io.InputStream is; 
  static {
    initDefaults();
    initNoteDescriptors();
  }
  /**
   * default ctor;
   * 
   * @param name java.lang.String
   */
  public NoteDescriptor(String key) {
    this(key, key);
  }
  /**
   * default ctor;
   * 
   * @param name java.lang.String
   */
  public NoteDescriptor(String key, String name) {
    this(key, name, false);
  }
  /**
   * ctor for predefined Notes
   * 
   * @param name java.lang.String
   */
  private NoteDescriptor(String key, String name, Class noteClass, boolean isUnique, boolean isDefault) {
    setKey(key);
    setName(name);
    setNoteContentClass(noteClass);
    setUnique(isUnique);
    setDefault(isDefault);
    if (isDefault) {
      notesDescriptors.put(key, this);
    }
  }
  /**
   * 
   * @param key String
   * @param name String
   * @param isDefault boolean
   */
  private NoteDescriptor(String key, String name, boolean isDefault) {
    setKey(key);
    setName(name);
    setDefault(isDefault);
    setUnique(true);
    if (isDefault) {
      notesDescriptors.put(key, this);
    }
  }
  /**
   * cloning.
   * 
   * @return java.lang.Object
   */
  @Override
  public Object clone() {
    NoteDescriptor desc = null;
    try {
      desc = (NoteDescriptor) super.clone();
    } catch (CloneNotSupportedException e) {
      e.printStackTrace();
    }
    desc.fieldUnit = (Unit) this.fieldUnit.clone();
    return desc;
  }
  /**
   * create mask of spectrum types for this note.
   * @return int
   * @param maskStr java.lang.String
   */
  private static int createSpectrumMask(String maskStr) {
    int mask = 0;
    int ALL = -1;
    StringTokenizer tokenizer = new StringTokenizer(maskStr, "|");
    while (tokenizer.hasMoreTokens()) {
      boolean notFlag = false;
      String token = tokenizer.nextToken();
      if (token.charAt(0) == '^') {
	notFlag = true;
	token = token.substring(1);
      }
      if (token.equalsIgnoreCase("ir"))
	mask |= (notFlag ? (ALL ^ ISpectrumIdentifier.IR) : ISpectrumIdentifier.IR);
      else if (token.equalsIgnoreCase("uv"))
	mask |= (notFlag ? (ALL ^ ISpectrumIdentifier.UV) : ISpectrumIdentifier.UV);
      else if (token.equalsIgnoreCase("ms"))
	mask |= (notFlag ? (ALL ^ ISpectrumIdentifier.MS) : ISpectrumIdentifier.MS);
      else if (token.equalsIgnoreCase("nmr"))
	mask |= (notFlag ? (ALL ^ ISpectrumIdentifier.NMR) : ISpectrumIdentifier.NMR);
      else if (token.equalsIgnoreCase("raman"))
	mask |= (notFlag ? (ALL ^ ISpectrumIdentifier.RAMAN) : ISpectrumIdentifier.RAMAN);
      else if (token.equalsIgnoreCase("flourescence"))
	mask |= (notFlag ? (ALL ^ ISpectrumIdentifier.FLUORESCENCE) : ISpectrumIdentifier.FLUORESCENCE);
      else if (token.equalsIgnoreCase("chromatogram"))
	mask |= (notFlag ? (ALL ^ ISpectrumIdentifier.CHROMATOGRAM) : ISpectrumIdentifier.CHROMATOGRAM);
      else if (token.equalsIgnoreCase("2d"))
	mask |= (notFlag ? (ALL ^ ISpectrumIdentifier.SPEC2D) : ISpectrumIdentifier.SPEC2D);
      else if (token.equalsIgnoreCase("all")) {
	mask = (notFlag ? 0 : ALL);
	break;
      }
    }
    return mask;
  }
  /**
   * comparison.
   * 
   * @return boolean
   * @param obj java.lang.Object
   */
  @Override
  public boolean equals(Object obj) {
    if (obj instanceof NoteDescriptor && ((NoteDescriptor) obj).getKey().equals(fieldKey))
      return true;
    return false;
  }
  /**
   * accessor method to hashtable.
   * 
   * @return com.creon.chem.spectrum.NoteDescriptor
   * @param key java.lang.String
   */
  public static NoteDescriptor findByKey(String key) {
    return (NoteDescriptor) notesDescriptors.get(key);
  }
  /**
   * gets the allowedSpectrumMask property (int) value. It is a mask of allowed ISpectrumIdentifier.
   * @return The allowedSpectrumMask property value.
   * @see #setAllowedSpectrumMask
   * @see ISpectrumIdentifier
   */
  public int getAllowedSpectrumMask() {
    return fieldAllowedMask;
  }
  /**
   * gets the deniedSpectrumMask property (int) value. It is a mask of denied ISpectrumIdentifier.
   * @return The deniedSpectrumMask property value.
   * @see #setDeniedSpectrumMask
   * @see ISpectrumIdentifier
   */
  public int getDeniedSpectrumMask() {
    return fieldDeniedMask;
  }
  /**
   * Gets the key property (java.lang.String) value.
   * @return The key property value.
   * @see #setKey
   */
  public java.lang.String getKey() {
    return fieldKey;
  }
  /**
   * Gets the name property (java.lang.String) value.
   * @return The name property value.
   * @see #setName
   */
  public java.lang.String getName() {
    return fieldName;
  }
  /**
   * Gets the noteContentClass property (java.lang.Class) value.
   * @return The noteContentClass property value.
   * @see #setNoteContentClass
   */
  public java.lang.Class getNoteContentClass() {
    return fieldNoteContentClass;
  }
  /**
   * Gets the noteContentParser property (java.lang.Class) value.
   * @return The noteContentParser property value.
   * @see #setNoteContentParser
   */
  public INoteContentParser getNoteContentParser() {
    return fieldNoteContentParser;
  }
  /**
   * Gets the parentKey property (java.lang.String) value.
   * @return The parentKey property value.
   * @see #setParentKey
   */
  public java.lang.String getParentKey() {
    return fieldParentKey;
  }
  /**
   * Gets the unit property (Unit) value.
   * @return The unit property value.
   * @see #setUnit
   */
  public Unit getUnit() {
    return fieldUnit;
  }
  /**
   * gets hash value.
   * 
   * @return int
   */
  @Override
  public int hashCode() {
    return fieldKey.hashCode();
  }
  /**
   * Insert the method's description here.
   * 
   */
  private static void initDefaults() {
    TITLE = new NoteDescriptor("title", "Title", String.class, true, true);
    OWNER = new NoteDescriptor("owner", "Owner", String.class, true, true);
    ORIGIN = new NoteDescriptor("origin", "Origin", String.class, true, true);
    JCAMPDX = new NoteDescriptor("jcampdx", "JCAMP-DX Version", String.class, true, true);
    IGNORE = new NoteDescriptor("#IGNORE", "", String.class, true, true);
  }
  /**
   * initialize table of note descriptors from default property file.
   * 
   */
  private static void initNoteDescriptors() {
    Properties notesProps = new Properties();
    is = null;
    try {
      UnitParser unitParser = new UnitParser();
      //is not working!! seems to null everytime
      is = NoteDescriptor.class.getResourceAsStream("notes.properties");
      if (is == null)
	return;
      notesProps.load(is);
      Enumeration notesNames = notesProps.propertyNames();
      while (notesNames.hasMoreElements()) {
	String key = (String) notesNames.nextElement();
	if (key.indexOf('.') < 0) {
	  String displayName = (String) notesProps.get(key);
	  String notesClassName = (String) notesProps.get(key + ".class");
	  Class notesClass;
	  if (notesClassName == null)
	    notesClass = String.class;
	  else {
	    try {
	      notesClass = Class.forName(notesClassName);
	    } catch (ClassNotFoundException e) {
	      notesClass = String.class;
	    }
	  }

	  String parserClassName = (String) notesProps.get(key + ".parser");
	  INoteContentParser parser;
	  if (parserClassName == null)
	    parser = DEFAULT_NOTECONTENT_PARSER;
	  else {
	    try {
	      parser = (INoteContentParser) (Class.forName(parserClassName).newInstance());
	    } catch (Exception e) {
	      parser = DEFAULT_NOTECONTENT_PARSER;
	    }
	  }
	  String uniqueStr = (String) notesProps.get(key + ".unique");
	  boolean unique = true;
	  if (uniqueStr != null)
	    unique = Boolean.valueOf(uniqueStr).booleanValue();

	  String parentKey = (String) notesProps.get(key + ".parent");

	  String allowedMaskStr = (String) notesProps.get(key + ".allowed");
	  int allowedMask = -1;
	  if (allowedMaskStr != null)
	    allowedMask = createSpectrumMask(allowedMaskStr);

	  String deniedMaskStr = (String) notesProps.get(key + ".denied");
	  int deniedMask = 0;
	  if (deniedMaskStr != null)
	    deniedMask = createSpectrumMask(deniedMaskStr);

	  Unit unit = null;
	  String unitStr = (String) notesProps.get(key + ".unit");
	  if (unitStr != null)
	    unit = (Unit) unitParser.parseContent(unitStr, Unit.class);

	  NoteDescriptor descr = new NoteDescriptor(key, displayName, notesClass, unique, true);
	  descr.setNoteContentParser(parser);
	  descr.setUnit(unit);
	  descr.setParentKey(parentKey);
	  descr.setAllowedSpectrumMask(allowedMask);
	  descr.setDeniedSpectrumMask(deniedMask);

	}
      }
    } catch (java.io.IOException e) {
    } finally {
      try {
	if (is != null)
	  is.close();
      } catch (Exception e) {
      }
    }
  }
  /**
   * check if note is allowed for spectrum.
   * @return boolean
   * @param spectrum com.creon.chem.spectrum.Spectrum
   */
  public boolean isAllowedForSpectrum(Spectrum spectrum) {
    return isAllowedForSpectrumID(spectrum.getIdentifier());
  }
  /**
   * check if note is allowed for spectrum identifier.
   * @return boolean
   * @param id int
   * @see ISpectrumIdentifier
   */
  public boolean isAllowedForSpectrumID(int id) {
    if ((id & fieldAllowedMask) == 0)
      return false;
    if ((id & fieldDeniedMask) == id)
      return false;
    return true;
  }
  /**
   * Gets the default property (boolean) value.
   * @return The default property value.
   * @see #setDefault
   */
  public boolean isDefault() {
    return fieldDefault;
  }
  /**
   * indicates that note is global (valid for all spectrum types).
   * @return boolean
   */
  public boolean isGlobal() {
    return fieldAllowedMask == -1 && fieldDeniedMask == 0;
  }
  /**
   * Gets the unique property (boolean) value.
   * @return The unique property value.
   * @see #setUnique
   */
  public boolean isUnique() {
    return fieldUnique;
  }
  /**
   * sets the allowedSpectrumMask property (int) value.
   * @param allowedSpectrumMask The new value for the property.
   * @see #getAllowedSpectrumMask
   */
  public void setAllowedSpectrumMask(int spectrumMask) {
    fieldAllowedMask = spectrumMask;
  }
  /**
   * Sets the default property (boolean) value.
   * @param isDefault The new value for the property.
   * @see #getDefault
   */
  private void setDefault(boolean isDefault) {
    fieldDefault = isDefault;
  }
  /**
   * sets the deniedSpectrumMask property (int) value.
   * @param deniedSpectrumMask The new value for the property.
   * @see #getDeniedSpectrumMask
   */
  public void setDeniedSpectrumMask(int spectrumMask) {
    fieldDeniedMask = spectrumMask;
  }
  /**
   * Sets the key property (java.lang.String) value.
   * @param key The new value for the property.
   * @see #getKey
   */
  public void setKey(java.lang.String key) {
    fieldKey = key;
  }
  /**
   * Sets the name property (java.lang.String) value.
   * @param name The new value for the property.
   * @see #getName
   */
  public void setName(java.lang.String name) {
    fieldName = name;
  }
  /**
   * Sets the noteContentClass property (java.lang.Class) value.
   * @param noteContentClass The new value for the property.
   * @see #getNoteContentClass
   */
  public void setNoteContentClass(java.lang.Class noteClass) {
    fieldNoteContentClass = noteClass;
  }
  /**
   * Sets the noteContentParser property (java.lang.Class) value.
   * @param noteContentParser The new value for the property.
   * @see #getNoteContentParser
   */
  public void setNoteContentParser(INoteContentParser parser) {
    fieldNoteContentParser = parser;
  }
  /**
   * Sets the parentKey property (java.lang.String) value.
   * @param parentKey The new value for the property.
   * @see #getParentKey
   */
  public void setParentKey(java.lang.String parentKey) {
    fieldParentKey = parentKey;
  }
  /**
   * Sets the unique property (boolean) value.
   * @param unique The new value for the property.
   * @see #getUnique
   */
  public void setUnique(boolean unique) {
    fieldUnique = unique;
  }
  /**
   * Sets the Unit property (Unit) value.
   * @param Unit The new value for the property.
   * @see #getUnit
   */
  public void setUnit(Unit unit) {
    fieldUnit = unit;
  }
  /**
   * string display.
   * 
   * @return java.lang.String
   */
  @Override
  public String toString() {
    return getKey();
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy