1 /* Copyright (C) 2003 Vladimir Roubtsov. All rights reserved. 2 * 3 * This program and the accompanying materials are made available under 4 * the terms of the Common Public License v1.0 which accompanies this distribution, 5 * and is available at http://www.eclipse.org/legal/cpl-v10.html 6 * 7 * $Id: IItemMetadata.java,v 1.1.1.1 2004/05/09 16:57:37 vlad_r Exp $ 8 */ 9 package com.vladium.emma.report; 10 11 // ---------------------------------------------------------------------------- 12 /** 13 * @author Vlad Roubtsov, (C) 2003 14 */ 15 public 16 interface IItemMetadata 17 { 18 // public: ................................................................ 19 20 // note: order is in sync with Factory init code 21 int TYPE_ID_ALL = 0; 22 int TYPE_ID_PACKAGE = 1; 23 int TYPE_ID_SRCFILE = 2; 24 int TYPE_ID_CLASS = 3; 25 int TYPE_ID_METHOD = 4; 26 27 int getTypeID (); 28 String getTypeName (); 29 30 /** 31 * Using a long is only ok for less than 64 global attributes, but this limit 32 * seems ok for a long time to come. 33 * 34 * @return bitmask for valid attributes 35 */ 36 long getAttributeIDs (); 37 38 abstract class Factory 39 { 40 public static IItemMetadata getTypeMetadata (final int typeID) 41 { 42 if ((typeID < TYPE_ID_ALL) || (typeID > TYPE_ID_METHOD)) 43 throw new IllegalArgumentException ("invalid type ID: " + typeID); 44 45 return METADATA [typeID]; 46 } 47 48 public static IItemMetadata [] getAllTypes () 49 { 50 return METADATA; 51 } 52 53 private Factory () {} 54 55 56 private static final IItemMetadata [] METADATA; // set in <clinit> 57 58 static 59 { 60 // this establishes the mapping TYPE_ID_xxx->metadata for type xxx: 61 62 METADATA = new IItemMetadata [] 63 { 64 AllItem.getTypeMetadata (), 65 PackageItem.getTypeMetadata (), 66 SrcFileItem.getTypeMetadata (), 67 ClassItem.getTypeMetadata (), 68 MethodItem.getTypeMetadata (), 69 }; 70 } 71 72 } // end of nested class 73 74 75 } // end of interface 76 // ----------------------------------------------------------------------------