2 * Copyright 2000-2009 JetBrains s.r.o.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package com
.intellij
.rt
.execution
.junit
.segments
;
18 import java
.util
.Hashtable
;
20 public abstract class OutputObjectRegistry
{
21 private final Hashtable myKnownKeys
= new Hashtable();
22 private int myLastIndex
= 0;
23 private PacketProcessor myMainTransport
;
24 private PacketProcessor myAuxilaryTransport
;
26 public OutputObjectRegistry(PacketProcessor transport
) {
27 myMainTransport
= transport
;
30 public OutputObjectRegistry(PacketProcessor mainTransport
, PacketProcessor auxilaryTransport
) {
32 myAuxilaryTransport
= auxilaryTransport
;
35 public String
referenceTo(Object test
) {
36 if (myKnownKeys
.containsKey(test
))
37 return (String
) myKnownKeys
.get(test
);
38 return sendObject(test
);
41 public Packet
createPacket() {
42 return new Packet(myMainTransport
, this);
45 private String
sendObject(Object test
) {
46 String key
= String
.valueOf(myLastIndex
++);
47 myKnownKeys
.put(test
, key
);
48 Packet packet
= createPacket().addString(PoolOfDelimiters
.OBJECT_PREFIX
).addReference(key
);
49 addStringRepresentation(test
, packet
);
50 packet
.addLong(getTestCont(test
));
51 sendViaAllTransports(packet
);
55 protected abstract int getTestCont(Object test
);
56 protected abstract void addStringRepresentation(Object test
, Packet packet
);
58 private void sendViaAllTransports(Packet packet
) {
60 if (myAuxilaryTransport
!= null)
61 packet
.sendThrough(myAuxilaryTransport
);
66 protected static void addTestClass(Packet packet
, String className
) {
68 addLimitedString(PoolOfTestTypes
.TEST_CLASS
).
69 addLimitedString(className
);
72 protected void addUnknownTest(Packet packet
, Object test
) {
74 addLimitedString(PoolOfTestTypes
.UNKNOWN
).
75 addLong(getTestCont(test
)).
76 addLimitedString(test
.getClass().getName());
79 protected static void addAllInPackage(Packet packet
, String name
) {
81 addLimitedString(PoolOfTestTypes
.ALL_IN_PACKAGE
).
82 addLimitedString(name
);
85 protected static void addTestMethod(Packet packet
, String methodName
, String className
) {
87 addLimitedString(PoolOfTestTypes
.TEST_METHOD
).
88 addLimitedString(methodName
).
89 addLimitedString(className
);
92 public void forget(Object test
) {
93 myKnownKeys
.remove(test
);