001: /*
002: * Copyright (c) 1998 - 2005 Versant Corporation
003: * All rights reserved. This program and the accompanying materials
004: * are made available under the terms of the Eclipse Public License v1.0
005: * which accompanies this distribution, and is available at
006: * http://www.eclipse.org/legal/epl-v10.html
007: *
008: * Contributors:
009: * Versant Corporation - initial API and implementation
010: */
011: package com.versant.core.storagemanager.logging;
012:
013: import com.versant.core.metadata.MDStatics;
014:
015: import java.util.List;
016: import java.util.ArrayList;
017: import java.util.Collections;
018:
019: /**
020: * Base class for events logged for operations that return states.
021: */
022: public class SmStatesReturnedEvent extends StorageManagerEvent {
023:
024: protected int returnedSize;
025: private String[] returnedOIDs;
026: private int[] lookupClassIDs;
027: private String[] lookupClassNames;
028:
029: public SmStatesReturnedEvent(int storageManagerId, int type) {
030: super (storageManagerId, type);
031: }
032:
033: /**
034: * How many states were returned in the packet? This includes the state
035: * asked for and all prefetched data.
036: */
037: public int getReturnedSize() {
038: return returnedSize;
039: }
040:
041: public void setReturnedSize(int returnedSize) {
042: this .returnedSize = returnedSize;
043: }
044:
045: /**
046: * Get all the OIDs for all of the states included in the response packet.
047: */
048: public String[] getReturnedOIDs() {
049: return returnedOIDs;
050: }
051:
052: public void setReturnedOIDs(String[] returnedOIDs) {
053: this .returnedOIDs = returnedOIDs;
054: }
055:
056: /**
057: * Set the classIDs and corresponding class names for all classID lookup
058: * for this event. This information can be used to display the class names
059: * for the classIDs in this event.
060: * @see #getNameForClassID(int)
061: */
062: public void setLookupClasses(int[] classIDs, String[] classNames) {
063: this .lookupClassIDs = classIDs;
064: this .lookupClassNames = classNames;
065: }
066:
067: public int[] getLookupClassIDs() {
068: return lookupClassIDs;
069: }
070:
071: public String[] getLookupClassNames() {
072: return lookupClassNames;
073: }
074:
075: /**
076: * Convert a class ID for a class in this event into its name. Returns
077: * null if no match found.
078: */
079: public String getNameForClassID(int id) {
080: int n = lookupClassIDs.length;
081: for (int i = 0; i < n; i++) {
082: if (lookupClassIDs[i] == id)
083: return lookupClassNames[i];
084: }
085: return null;
086: }
087:
088: /**
089: * Get a list of all the ClassAndOID's for all the data in the return
090: * packet.
091: */
092: public List getPacketEntries() {
093: if (returnedOIDs == null)
094: return Collections.EMPTY_LIST;
095: int n = returnedOIDs.length;
096: ArrayList a = new ArrayList(n);
097: for (int i = 0; i < n; i++) {
098: String oid = returnedOIDs[i];
099: int j = oid.indexOf(MDStatics.OID_CHAR_SEPERATOR);
100: int classId = Integer.parseInt(oid.substring(0, j));
101: a.add(new ClassAndOID(oid, getNameForClassID(classId)));
102: }
103: return a;
104: }
105:
106: /**
107: * An entry in the data packet.
108: */
109: public static class ClassAndOID {
110:
111: private String oid;
112: private String className;
113:
114: public ClassAndOID(String oid, String className) {
115: this .oid = oid;
116: this .className = className;
117: }
118:
119: public String getOid() {
120: return oid;
121: }
122:
123: public String getClassName() {
124: return className;
125: }
126:
127: public void setOid(String oid) {
128: this .oid = oid;
129: }
130:
131: public void setClassName(String className) {
132: this.className = className;
133: }
134: }
135:
136: }
|