1/**
2 * Copyright 2007 Google Inc.
3 *
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
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
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.
15 */
16
17package com.tonicsystems.jarjar;
18
19import com.tonicsystems.jarjar.util.*;
20import java.io.*;
21import java.util.*;
22
23abstract public class AbstractDepHandler implements DepHandler
24{
25    protected final int level;
26    private final Set<List<Object>> seenIt = new HashSet<List<Object>>();
27
28    protected AbstractDepHandler(int level) {
29        this.level = level;
30    }
31
32    public void handle(PathClass from, PathClass to) throws IOException {
33        List<Object> pair;
34        if (level == LEVEL_JAR) {
35            pair = createPair(from.getClassPath(), to.getClassPath());
36        } else {
37            pair = createPair(from.getClassName(), to.getClassName());
38        }
39        if (!seenIt.contains(pair)) {
40            seenIt.add(pair);
41            handle(pair.get(0).toString(), pair.get(1).toString());
42        }
43    }
44
45    abstract protected void handle(String from, String to) throws IOException;
46
47    public void handleStart() throws IOException { }
48    public void handleEnd() throws IOException { }
49
50    private static List<Object> createPair(Object o1, Object o2) {
51        List<Object> list = new ArrayList<Object>(2);
52        list.add(o1);
53        list.add(o2);
54        return list;
55    }
56}
57