/* * file: Props.java * author: Jon Iles * copyright: (c) Packwood Software 2003 * date: 27/05/2003 */ /* * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by the * Free Software Foundation; either version 2.1 of the License, or (at your * option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ package net.sf.mpxj.mpp; import java.io.PrintWriter; import java.io.StringWriter; import java.util.Date; import java.util.Set; import java.util.TreeMap; /** * This class represents the common structure of Props files found in * Microsoft Project MPP files. The MPP8 and MPP9 file formats both * implement Props files slightly differently, so this class contains * the shared implementation detail, with specific implementations for * MPP8 and MPP9 Props files found in the Props8 and Props9 classes. */ class Props extends MPPComponent { /** * Retrieve property data as a byte array. * * @param type Type identifier * @return byte array of data */ public byte[] getByteArray(Integer type) { return (m_map.get(type)); } /** * Retrieves a byte value from the property data. * * @param type Type identifier * @return byte value */ public byte getByte(Integer type) { byte result = 0; byte[] item = m_map.get(type); if (item != null) { result = item[0]; } return (result); } /** * Retrieves a short int value from the property data. * * @param type Type identifier * @return short int value */ public int getShort(Integer type) { int result = 0; byte[] item = m_map.get(type); if (item != null) { result = MPPUtility.getShort(item, 0); } return (result); } /** * Retrieves an integer value from the property data. * * @param type Type identifier * @return integer value */ public int getInt(Integer type) { int result = 0; byte[] item = m_map.get(type); if (item != null) { result = MPPUtility.getInt(item, 0); } return (result); } /** * Retrieves a double value from the property data. * * @param type Type identifier * @return double value */ public double getDouble(Integer type) { double result = 0; byte[] item = m_map.get(type); if (item != null) { result = MPPUtility.getDouble(item, 0); } return (result); } /** * Retrieves a timestamp from the property data. * * @param type Type identifier * @return timestamp */ public Date getTime(Integer type) { Date result = null; byte[] item = m_map.get(type); if (item != null) { result = MPPUtility.getTime(item, 0); } return (result); } /** * Retrieves a timestamp from the property data. * * @param type Type identifier * @return timestamp */ public Date getTimestamp(Integer type) { Date result = null; byte[] item = m_map.get(type); if (item != null) { result = MPPUtility.getTimestamp(item, 0); } return (result); } /** * Retrieves a boolean value from the property data. * * @param type Type identifier * @return boolean value */ public boolean getBoolean(Integer type) { boolean result = false; byte[] item = m_map.get(type); if (item != null) { result = !(MPPUtility.getShort(item, 0) == 0); } return (result); } /** * Retrieves a string value from the property data. * * @param type Type identifier * @return string value */ public String getUnicodeString(Integer type) { String result = null; byte[] item = m_map.get(type); if (item != null) { result = MPPUtility.getUnicodeString(item, 0); } return (result); } /** * Retrieves a date value from the property data. * * @param type Type identifier * @return string value */ public Date getDate(Integer type) { Date result = null; byte[] item = m_map.get(type); if (item != null) { result = MPPUtility.getDate(item, 0); } return (result); } /** * Retrieve the set of keys represented by this instance. * * @return key set */ public Set<Integer> keySet() { return (m_map.keySet()); } /** * This method dumps the contents of this properties block as a String. * Note that this facility is provided as a debugging aid. * * @return formatted contents of this block */ @Override public String toString() { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); pw.println("BEGIN Props"); for (Integer key : m_map.keySet()) { pw.println(" Key: " + key + " Value: "); pw.println(MPPUtility.hexdump(m_map.get(key), true, 16, " ")); } pw.println("END Props"); pw.println(); pw.close(); return (sw.toString()); } /** * Data types. */ public static final Integer PROJECT_START_DATE = Integer.valueOf(37748738); public static final Integer PROJECT_FINISH_DATE = Integer.valueOf(37748739); public static final Integer SCHEDULE_FROM = Integer.valueOf(37748740); public static final Integer DEFAULT_CALENDAR_NAME = Integer.valueOf(37748750); public static final Integer CURRENCY_SYMBOL = Integer.valueOf(37748752); public static final Integer CURRENCY_PLACEMENT = Integer.valueOf(37748753); public static final Integer CURRENCY_DIGITS = Integer.valueOf(37748754); public static final Integer DURATION_UNITS = Integer.valueOf(37748757); public static final Integer WORK_UNITS = Integer.valueOf(37748758); public static final Integer TASK_UPDATES_RESOURCE = Integer.valueOf(37748761); public static final Integer SPLIT_TASKS = Integer.valueOf(37748762); public static final Integer START_TIME = Integer.valueOf(37748764); public static final Integer MINUTES_PER_DAY = Integer.valueOf(37748765); public static final Integer MINUTES_PER_WEEK = Integer.valueOf(37748766); public static final Integer STANDARD_RATE = Integer.valueOf(37748767); public static final Integer OVERTIME_RATE = Integer.valueOf(37748768); public static final Integer END_TIME = Integer.valueOf(37748769); public static final Integer WEEK_START_DAY = Integer.valueOf(37748773); public static final Integer FISCAL_YEAR_START_MONTH = Integer.valueOf(37748780); public static final Integer HONOR_CONSTRAINTS = Integer.valueOf(37748794); public static final Integer FISCAL_YEAR_START = Integer.valueOf(37748801); public static final Integer EDITABLE_ACTUAL_COSTS = Integer.valueOf(37748802); public static final Integer DAYS_PER_MONTH = Integer.valueOf(37753743); public static final Integer CURRENCY_CODE = Integer.valueOf(37753787); public static final Integer CALCULATE_MULTIPLE_CRITICAL_PATHS = Integer.valueOf(37748793); public static final Integer TASK_FIELD_NAME_ALIASES = Integer.valueOf(1048577); public static final Integer RESOURCE_FIELD_NAME_ALIASES = Integer.valueOf(1048578); public static final Integer PASSWORD_FLAG = Integer.valueOf(893386752); public static final Integer PROTECTION_PASSWORD_HASH = Integer.valueOf(893386756); public static final Integer WRITE_RESERVATION_PASSWORD_HASH = Integer.valueOf(893386757); public static final Integer ENCRYPTION_CODE = Integer.valueOf(893386759); public static final Integer STATUS_DATE = Integer.valueOf(37748805); public static final Integer SUBPROJECT_COUNT = Integer.valueOf(37748868); public static final Integer SUBPROJECT_DATA = Integer.valueOf(37748898); public static final Integer SUBPROJECT_TASK_COUNT = Integer.valueOf(37748900); public static final Integer DEFAULT_CALENDAR_HOURS = Integer.valueOf(37753736); public static final Integer TASK_FIELD_ATTRIBUTES = Integer.valueOf(37753744); public static final Integer FONT_BASES = Integer.valueOf(54525952); public static final Integer AUTO_FILTER = Integer.valueOf(893386767); public static final Integer PROJECT_FILE_PATH = Integer.valueOf(893386760); public static final Integer HYPERLINK_BASE = Integer.valueOf(37748810); public static final Integer RESOURCE_CREATION_DATE = Integer.valueOf(205521219); public static final Integer SHOW_PROJECT_SUMMARY_TASK = Integer.valueOf(54525961); public static final Integer TASK_FIELD_MAP = Integer.valueOf(131092); public static final Integer TASK_FIELD_MAP2 = Integer.valueOf(50331668); public static final Integer ENTERPRISE_CUSTOM_FIELD_MAP = Integer.valueOf(37753797); // MPP14 37753768? public static final Integer RESOURCE_FIELD_MAP = Integer.valueOf(131093); public static final Integer RESOURCE_FIELD_MAP2 = Integer.valueOf(50331669); public static final Integer RELATION_FIELD_MAP = Integer.valueOf(131094); public static final Integer ASSIGNMENT_FIELD_MAP = Integer.valueOf(131095); public static final Integer ASSIGNMENT_FIELD_MAP2 = Integer.valueOf(50331671); public static final Integer BASELINE_DATE = Integer.valueOf(37753749); public static final Integer BASELINE1_DATE = Integer.valueOf(37753750); public static final Integer BASELINE2_DATE = Integer.valueOf(37753751); public static final Integer BASELINE3_DATE = Integer.valueOf(37753752); public static final Integer BASELINE4_DATE = Integer.valueOf(37753753); public static final Integer BASELINE5_DATE = Integer.valueOf(37753754); public static final Integer BASELINE6_DATE = Integer.valueOf(37753755); public static final Integer BASELINE7_DATE = Integer.valueOf(37753756); public static final Integer BASELINE8_DATE = Integer.valueOf(37753757); public static final Integer BASELINE9_DATE = Integer.valueOf(37753758); public static final Integer BASELINE10_DATE = Integer.valueOf(37753759); public static final Integer CUSTOM_FIELDS = Integer.valueOf(71303169); protected TreeMap<Integer, byte[]> m_map = new TreeMap<Integer, byte[]>(); }