src/share/classes/org/openjdk/jigsaw/RepositoryCatalog.java

Print this page

        

@@ -27,11 +27,11 @@
 
 import java.io.*;
 import java.lang.module.*;
 import java.util.*;
 
-import static org.openjdk.jigsaw.Repository.ModuleType;
+import static org.openjdk.jigsaw.Repository.ModuleFileType;
 import static org.openjdk.jigsaw.FileConstants.ModuleFile.HashType;
 
 
 /**
  * <p> A {@linkplain Repository module repository's} catalog </p>

@@ -48,24 +48,32 @@
         throws IOException;
     
     public abstract void gatherModuleIds(String moduleName, Set<ModuleId> mids)
         throws IOException;
 
+    public abstract void gatherModuleIds(String moduleName,
+                                         ModuleArchitecture modArch,
+                                         Set<ModuleId> mids)
+        throws IOException;
+
     public abstract byte[] readModuleInfoBytes(ModuleId mid)
         throws IOException;
 
     static class Entry {
 
-        final ModuleType type;
+        final ModuleFileType type;
+        final ModuleArchitecture modArch;
         final byte[] mibs;
         final long csize;
         final long usize;
         final HashType hashType;
         final byte[] hash;
 
-        Entry(ModuleType t, byte[] m, long cs, long us, HashType ht, byte[] h) {
+        Entry(ModuleFileType t, ModuleArchitecture modArch,
+              byte[] m, long cs, long us, HashType ht, byte[] h) {
             type = t;
+            this.modArch = modArch;
             mibs = m;
             csize = cs;
             usize = us;
             hashType = ht;
             hash = h;

@@ -73,14 +81,14 @@
 
     }
 
     abstract void add(Entry e);
 
-    public void add(ModuleType t, byte[] mibs, long cs, long us,
-                    HashType hashType, byte[] hash)
+    public void add(ModuleFileType t, ModuleArchitecture modArch, byte[] mibs,
+                    long cs, long us, HashType hashType, byte[] hash)
     {
-        add(new Entry(t, mibs, cs, us, hashType, hash));
+        add(new Entry(t, modArch, mibs, cs, us, hashType, hash));
     }
 
     public abstract boolean remove(ModuleId mid);
 
     abstract Entry get(ModuleId mid);

@@ -105,15 +113,26 @@
             mids.addAll(modules.keySet());
         }
         
         @Override
         public void gatherModuleIds(String moduleName, Set<ModuleId> mids) {
+            gatherModuleIds(moduleName, ModuleArchitecture.ANY, mids);
+        }
+
+        @Override
+        public void gatherModuleIds(String moduleName,
+                                    ModuleArchitecture modArch,
+                                    Set<ModuleId> mids)
+        {
             for (ModuleId mid : moduleForViewId.keySet()) {
-                if (moduleName == null || mid.name().equals(moduleName))
+                if (moduleName == null || mid.name().equals(moduleName)) {
+                    Entry entry = get(mid);
+                    if (entry.modArch.equals(modArch))
                     mids.add(mid);
             }
         }
+        }
 
         @Override
         public byte[] readModuleInfoBytes(ModuleId mid) {
             Entry e = modules.get(moduleForViewId.get(mid));
             return (e != null) ? e.mibs : null;

@@ -182,10 +201,12 @@
                 out.writeInt(modules.size());
                 for (Map.Entry<ModuleId,Entry> me : modules.entrySet()) {
                     out.writeUTF(me.getKey().toString()); // ## Redundant
                     Entry e = me.getValue();
                     out.writeUTF(e.type.getFileNameExtension());
+                    out.writeUTF(e.modArch.os());
+                    out.writeUTF(e.modArch.arch());
                     out.writeLong(e.csize);
                     out.writeLong(e.usize);
                     out.writeShort(e.hashType.value());
                     out.writeShort(e.hash.length);
                     out.write(e.hash);

@@ -208,21 +229,23 @@
             FileHeader fh = fileHeader();
             fh.read(in);
             int nms = in.readInt();
             for (int i = 0; i < nms; i++) {
                 ModuleId mid = jms.parseModuleId(in.readUTF());
-                ModuleType t = ModuleType.fromFileNameExtension(in.readUTF());
+                ModuleFileType t = ModuleFileType.fromFileNameExtension(in.readUTF());
+                ModuleArchitecture modArch = ModuleArchitecture.create(in.readUTF(),
+                                                                       in.readUTF());
                 long cs = in.readLong();
                 long us = in.readLong();
                 HashType ht = HashType.valueOf(in.readShort());
                 int nb = in.readShort();
                 byte[] hash = new byte[nb];
                 in.readFully(hash);
                 nb = in.readShort();
                 byte[] mibs = new byte[nb];
                 in.readFully(mibs);
-                modules.put(mid, new Entry(t, mibs, cs, us, ht, hash));
+                modules.put(mid, new Entry(t, modArch, mibs, cs, us, ht, hash));
             }
             int nmids = in.readInt();
             for (int i = 0; i < nmids; i++) {
                 ModuleId id = jms.parseModuleId(in.readUTF());
                 ModuleId mid = jms.parseModuleId(in.readUTF());