/* * @(#)TagSet.java 1.0 2010-07-24 * * Copyright (c) 2010 Werner Randelshofer, Goldau, Switzerland. * All rights reserved. * * You may not use, copy or modify this file, except in compliance with the * license agreement you entered into with Werner Randelshofer. * For details see accompanying license terms. */ package org.monte.media.tiff; import java.util.HashMap; /** * A class representing a set of TIFF tags. Each tag in the set must have a * unique number (this is a limitation of the TIFF specification itself). * <p> * This class and its subclasses are responsible for mapping between raw tag * numbers and TIFFTag objects, which contain additional information about each * tag, such as the tag's name, legal data types, and mnemonic names for some or * all of its data values. * * @author Werner Randelshofer * @version 1.0 2010-07-24 Created. */ public abstract class TagSet { private HashMap<Integer, TIFFTag> tagsByNumber = new HashMap<Integer, TIFFTag>(); private String name; public TagSet(String name, TIFFTag[] tags) { this.name = name; for (TIFFTag tag : tags) { tag.setTagSet(this); tagsByNumber.put(tag.getNumber(), tag); } } /** Returns the TIFFTag from this set that is associated with the given * tag number. * <br> * Returns a TIFFTag with name "unknown" if the tag is not defined. */ public TIFFTag getTag(int tagNumber) { TIFFTag tag=tagsByNumber.get(tagNumber); if (tag==null) { synchronized (this) { tag=tagsByNumber.get(tagNumber); if (tag==null) { tag=new TIFFTag("unknown",tagNumber,TIFFTag.ALL_MASK,null); tagsByNumber.put(tagNumber, tag); } } } return tag; } /** * @return the name */ public String getName() { return name; } }