+/** @file\r
+ This file is for surface area information retrieval.\r
+\r
+ Copyright (c) 2006, Intel Corporation\r
+ All rights reserved. This program and the accompanying materials\r
+ are licensed and made available under the terms and conditions of the BSD License\r
+ which accompanies this distribution. The full text of the license may be found at\r
+ http://opensource.org/licenses/bsd-license.php\r
+\r
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+ **/\r
+package org.tianocore.frameworkwizard.platform.ui.global;\r
+\r
+import java.util.Vector;\r
+\r
+public class LibraryClassDescriptor {\r
+ public String className = "";\r
+ public String supArchs = "";\r
+ public String supModTypes = "";\r
+ \r
+ public LibraryClassDescriptor (String s1, String s2, String s3) {\r
+ className = s1;\r
+ if (s2 != null) {\r
+ supArchs = s2; \r
+ }\r
+ if (s3 != null) {\r
+ supModTypes = s3; \r
+ }\r
+ \r
+ }\r
+ \r
+ public boolean equals(Object obj) {\r
+ if (obj instanceof LibraryClassDescriptor) {\r
+ LibraryClassDescriptor id = (LibraryClassDescriptor)obj;\r
+ if (className.equals(id.className) && sameArchs (supArchs, id.supArchs) && sameModTypes(supModTypes, id.supModTypes)) {\r
+ return true;\r
+ }\r
+ return false;\r
+ }\r
+ else {\r
+ return super.equals(obj);\r
+ }\r
+ }\r
+ \r
+ public int hashCode(){\r
+ return (className + supArchs + supModTypes).toLowerCase().hashCode();\r
+ }\r
+ \r
+ public String toString() {\r
+ return "Library Class "+ className + " [SupArchs: " + supArchs + " SupModTypes: " + supModTypes + "]";\r
+ }\r
+ \r
+ public boolean isSubSetByArchs (LibraryClassDescriptor lcd) {\r
+ if (className.equals(lcd.className)) {\r
+ Vector<String> vArchs1 = getVectorFromString(supArchs);\r
+ Vector<String> vArchs2 = getVectorFromString(lcd.supArchs);\r
+ \r
+ if (isSubSet(vArchs1, vArchs2)) {\r
+ return true;\r
+ }\r
+ }\r
+ return false;\r
+ }\r
+ \r
+ public boolean isSubSetByModTypes (LibraryClassDescriptor lcd) {\r
+ if (className.equals(lcd.className)) {\r
+ Vector<String> vModTypes1 = getVectorFromString(supModTypes);\r
+ Vector<String> vModTypes2 = getVectorFromString(lcd.supModTypes);\r
+ \r
+ if (isSubSet(vModTypes1, vModTypes2)) {\r
+ return true;\r
+ }\r
+ }\r
+ return false;\r
+ }\r
+ \r
+ public boolean hasInterSectionWith (LibraryClassDescriptor lcd) {\r
+ if (className.equals(lcd.className)) {\r
+ Vector<String> vArchs1 = getVectorFromString(supArchs);\r
+ Vector<String> vArchs2 = getVectorFromString(lcd.supArchs);\r
+ if (vArchs1.size() == 0 || (vArchs1.size() == 1 && vArchs1.get(0).equalsIgnoreCase(""))) {\r
+ return true;\r
+ }\r
+ if (vArchs2.size() == 0 || (vArchs2.size() == 1 && vArchs2.get(0).equalsIgnoreCase(""))) {\r
+ return true;\r
+ }\r
+ vArchs1.retainAll(vArchs2);\r
+ if (vArchs1.size() > 0) {\r
+ return true;\r
+ }\r
+ }\r
+ return false;\r
+ }\r
+ \r
+ private boolean isSubSet (Vector<String> v1, Vector<String> v2) {\r
+ if (v2.size() == 0 || (v2.size() == 1 && v2.get(0).equalsIgnoreCase(""))) {\r
+ return true;\r
+ }\r
+ if (v2.containsAll(v1)) {\r
+ return true;\r
+ }\r
+ return false;\r
+ }\r
+ \r
+ public Vector<String> getVectorFromString (String s) {\r
+ if (s == null || s.equals("null")) {\r
+ s = "";\r
+ }\r
+ String[] sa1 = s.split(" ");\r
+ Vector<String> v = new Vector<String>();\r
+ for (int i = 0; i < sa1.length; ++i) {\r
+ v.add(sa1[i]);\r
+ }\r
+ return v;\r
+ }\r
+ \r
+ private boolean sameArchs (String archs1, String archs2) {\r
+ Vector<String> vArchs1 = getVectorFromString(archs1);\r
+ Vector<String> vArchs2 = getVectorFromString(archs2);\r
+ \r
+ if (vArchs1.containsAll(vArchs2) && vArchs2.containsAll(vArchs1)) {\r
+ return true;\r
+ }\r
+ return false;\r
+ }\r
+ \r
+ private boolean sameModTypes (String modTypes1, String modTypes2) {\r
+ return sameArchs(modTypes1, modTypes2);\r
+ }\r
+}
\ No newline at end of file