/* * Copyright 2009 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.google.gwt.core.ext.linker.impl; import com.google.gwt.core.ext.linker.Artifact; import com.google.gwt.core.ext.linker.Transferable; import java.util.ArrayList; import java.util.List; import java.util.TreeMap; /** * Used by {@link SelectionScriptLinker} to hold selection information about an * individual compiled permutation. The linker generates one instance of this * class per permutation and then accumulates them in the final link, where it * generates a selection script. */ @Transferable public class SelectionInformation extends Artifact<SelectionInformation> { private final int hashCode; private final TreeMap<String, String> propMap; private final int softPermutationId; private final String strongName; public SelectionInformation(String strongName, int softPermutationId, TreeMap<String, String> propMap) { super(SelectionScriptLinker.class); this.strongName = strongName; this.softPermutationId = softPermutationId; this.propMap = propMap; hashCode = strongName.hashCode() + softPermutationId * 19 + propMap.hashCode() * 17 + 11; } public TreeMap<String, String> getPropMap() { return propMap; } public int getSoftPermutationId() { return softPermutationId; } public String getStrongName() { return strongName; } @Override public int hashCode() { return hashCode; } @Override protected int compareToComparableArtifact(SelectionInformation o) { // compare the strong names int cmp = getStrongName().compareTo(o.getStrongName()); if (cmp != 0) { return cmp; } cmp = getSoftPermutationId() - o.getSoftPermutationId(); if (cmp != 0) { return cmp; } // compare the size of the property maps if (getPropMap().size() != o.getPropMap().size()) { return getPropMap().size() - o.getPropMap().size(); } // compare the key sets of the property maps List<String> myKeys = new ArrayList<String>(getPropMap().keySet()); List<String> oKeys = new ArrayList<String>(o.getPropMap().keySet()); for (int i = 0; i < myKeys.size(); i++) { cmp = myKeys.get(i).compareTo(oKeys.get(i)); if (cmp != 0) { return cmp; } } // compare the property map values for (String key : getPropMap().keySet()) { cmp = getPropMap().get(key).compareTo(o.getPropMap().get(key)); if (cmp != 0) { return cmp; } } return 0; } @Override protected Class<SelectionInformation> getComparableArtifactType() { return SelectionInformation.class; } }