1 11 package org.eclipse.core.internal.resources; 12 13 import java.io.DataInputStream ; 14 import java.io.IOException ; 15 import java.util.*; 16 import org.eclipse.core.internal.utils.Messages; 17 import org.eclipse.core.resources.IResourceStatus; 18 import org.eclipse.core.runtime.*; 19 20 24 public class MarkerSnapshotReader_1 extends MarkerSnapshotReader { 25 26 public static final byte INDEX = 1; 28 public static final byte QNAME = 2; 29 30 public static final byte ATTRIBUTE_NULL = 0; 32 public static final byte ATTRIBUTE_BOOLEAN = 1; 33 public static final byte ATTRIBUTE_INTEGER = 2; 34 public static final byte ATTRIBUTE_STRING = 3; 35 36 public MarkerSnapshotReader_1(Workspace workspace) { 37 super(workspace); 38 } 39 40 60 public void read(DataInputStream input) throws IOException , CoreException { 61 IPath path = new Path(input.readUTF()); 62 int markersSize = input.readInt(); 63 MarkerSet markers = new MarkerSet(markersSize); 64 ArrayList readTypes = new ArrayList(); 65 for (int i = 0; i < markersSize; i++) 66 markers.add(readMarkerInfo(input, readTypes)); 67 ResourceInfo info = workspace.getResourceInfo(path, false, false); 70 if (info == null) 71 return; 72 info.setMarkers(markers); 73 info.clear(ICoreConstants.M_MARKERS_SNAP_DIRTY); 74 } 75 76 private Map readAttributes(DataInputStream input) throws IOException { 77 short attributesSize = input.readShort(); 78 if (attributesSize == 0) 79 return null; 80 Map result = new MarkerAttributeMap(attributesSize); 81 for (int j = 0; j < attributesSize; j++) { 82 String key = input.readUTF(); 83 byte type = input.readByte(); 84 Object value = null; 85 switch (type) { 86 case ATTRIBUTE_INTEGER : 87 value = new Integer (input.readInt()); 88 break; 89 case ATTRIBUTE_BOOLEAN : 90 value = input.readBoolean() ? Boolean.TRUE : Boolean.FALSE; 91 break; 92 case ATTRIBUTE_STRING : 93 value = input.readUTF(); 94 break; 95 case ATTRIBUTE_NULL : 96 break; 98 } 99 if (value != null) 100 result.put(key, value); 101 } 102 return result.isEmpty() ? null : result; 103 } 104 105 private MarkerInfo readMarkerInfo(DataInputStream input, List readTypes) throws IOException , CoreException { 106 MarkerInfo info = new MarkerInfo(); 107 info.setId(input.readLong()); 108 byte constant = input.readByte(); 109 switch (constant) { 110 case QNAME : 111 String type = input.readUTF(); 112 info.setType(type); 113 readTypes.add(type); 114 break; 115 case INDEX : 116 info.setType((String ) readTypes.get(input.readInt())); 117 break; 118 default : 119 String msg = Messages.resources_readMarkers; 121 throw new ResourceException(IResourceStatus.FAILED_READ_METADATA, null, msg, null); 122 } 123 info.internalSetAttributes(readAttributes(input)); 124 return info; 125 } 126 } 127 | Popular Tags |