Changeset 3431


Ignore:
Timestamp:
12/01/07 15:18:01 (12 years ago)
Author:
melissa
Message:

Updated all OME download logic to support downloading from OMERO.

Location:
trunk/loci
Files:
1 added
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/formats/ome/OMEROReader.java

    r3429 r3431  
    132132    if (debug) debug("OMEROReader.initFile(" + id + ")"); 
    133133 
    134     StringTokenizer st = new StringTokenizer(id, "\n"); 
    135     serverName = st.nextToken(); 
    136     port = st.nextToken(); 
    137     username = st.nextToken(); 
    138     password = st.nextToken(); 
    139     id = st.nextToken(); 
     134    OMECredentials cred = OMEUtils.parseCredentials(id); 
     135    id = String.valueOf(cred.imageID); 
    140136    super.initFile(id); 
    141137 
     138    cred.isOMERO = true; 
     139 
    142140    try { 
    143       r.setVar("username", username); 
    144       r.setVar("password", password); 
    145       r.setVar("serverName", serverName); 
    146       r.setVar("port", Integer.parseInt(port)); 
    147       r.setVar("id", Long.parseLong(id)); 
    148       r.setVar("idObj", new Long(id)); 
    149       r.exec("login = new Login(username, password)"); 
    150       r.exec("server = new Server(serverName, port)"); 
     141      r.setVar("user", cred.username); 
     142      r.setVar("pass", cred.password); 
     143      r.setVar("port", Integer.parseInt(cred.port)); 
     144      r.setVar("sname", cred.server); 
     145      r.setVar("id", cred.imageID); 
     146      r.setVar("idObj", new Long(cred.imageID)); 
     147 
     148      r.exec("login = new Login(user, pass)"); 
     149      r.exec("server = new Server(sname, port)"); 
    151150      r.exec("sf = new ServiceFactory(server, login)"); 
    152151      r.exec("query = sf.getQueryService()"); 
  • trunk/loci/formats/ome/OMEReader.java

    r3197 r3431  
    8484  protected void initFile(String id) throws FormatException, IOException { 
    8585    if (id.equals(loginString)) return; 
     86 
     87    OMECredentials cred = OMEUtils.parseCredentials(id); 
     88    id = String.valueOf(cred.imageID); 
     89 
    8690    super.initFile(id); 
    8791 
    88     loginString = id; 
    89     server = id.substring(0, id.lastIndexOf("?")); 
    90     int ndx = id.indexOf("&"); 
    91     String user = null; 
    92     String pass = null; 
    93     if (id.indexOf("user") != -1) { 
    94       user = id.substring(id.lastIndexOf("?") + 6, ndx); 
    95       pass = id.substring(ndx + 10, id.indexOf("&", ndx + 1)); 
    96       ndx = id.indexOf("&", ndx + 1); 
    97       imageId = id.substring(ndx + 4); 
    98     } 
    99     else { 
    100       sessionKey = id.substring(id.lastIndexOf("?") + 5, ndx); 
    101       imageId = id.substring(ndx + 4); 
    102     } 
    103  
    10492    // do sanity check on server name 
    105     if (server.startsWith("http:")) { 
    106       server = server.substring(5); 
    107     } 
    108     while (server.startsWith("/")) server = server.substring(1); 
    109     int slash = server.indexOf("/"); 
    110     if (slash >= 0) server = server.substring(0, slash); 
    111     int colon = server.indexOf(":"); 
    112     if (colon >= 0) server = server.substring(0, colon); 
    113  
    114     currentId = server + ":" + imageId; 
    115  
    116     String omeis = "http://" + server + "/cgi-bin/omeis"; 
    117     server = "http://" + server + "/shoola/"; 
     93    if (cred.server.startsWith("http:")) { 
     94      cred.server = cred.server.substring(5); 
     95    } 
     96    while (cred.server.startsWith("/")) cred.server = cred.server.substring(1); 
     97    int slash = cred.server.indexOf("/"); 
     98    if (slash >= 0) cred.server = cred.server.substring(0, slash); 
     99    int colon = cred.server.indexOf(":"); 
     100    if (colon >= 0) cred.server = cred.server.substring(0, colon); 
     101 
     102    currentId = cred.server + ":" + cred.imageID; 
     103 
     104    String omeis = "http://" + cred.server + "/cgi-bin/omeis"; 
     105    cred.server = "http://" + cred.server + "/shoola/"; 
     106    cred.isOMERO = false; 
     107 
     108    try { 
     109      OMEUtils.login(cred); 
     110    } 
     111    catch (ReflectException e) { 
     112      throw new FormatException(e); 
     113    } 
     114 
     115    String user = cred.username; 
     116    String pass = cred.password; 
    118117 
    119118    Criteria c = new Criteria(); 
     
    129128    c.addWantedField("default_pixels", "Repository"); 
    130129    c.addWantedField("default_pixels.Repository", "ImageServerURL"); 
    131     c.addFilter("id", "=", imageId); 
     130    c.addFilter("id", "=", String.valueOf(cred.imageID)); 
    132131 
    133132    FieldsSpecification fs = new FieldsSpecification(); 
     
    136135    c.addWantedFields("default_pixels", fs); 
    137136 
    138     rs = DataServer.getDefaultServices(server); 
     137    rs = DataServer.getDefaultServices(cred.server); 
    139138 
    140139    rc = rs.getRemoteCaller(); 
  • trunk/loci/formats/ome/OMEUtils.java

    r3430 r3431  
    1919*/ 
    2020 
    21 package loci.ome.util; 
     21package loci.formats.ome; 
    2222 
    2323import ij.gui.GenericDialog; 
    24 import java.awt.GridBagConstraints; 
    25 import java.awt.GridBagLayout; 
     24import java.awt.*; 
    2625import java.awt.image.BufferedImage; 
     26import java.io.*; 
    2727import java.net.MalformedURLException; 
     28import java.sql.Timestamp; 
    2829import java.util.*; 
    29 import javax.swing.JLabel; 
    30 import javax.swing.JPanel; 
    31 import javax.swing.ImageIcon; 
     30import javax.imageio.ImageIO; 
     31import javax.swing.*; 
     32import loci.formats.*; 
     33import loci.formats.ome.OMECredentials; 
    3234import loci.plugins.Util; 
    33 import org.openmicroscopy.ds.*; 
    34 import org.openmicroscopy.ds.dto.Image; 
    35 import org.openmicroscopy.ds.st.*; 
    36 import org.openmicroscopy.is.*; 
    3735 
    3836/** 
     
    4543public class OMEUtils { 
    4644 
    47   // -- Fields -- 
    48  
    49   private static boolean loggedIn = false; 
    50  
    51   private static DataFactory df; 
    52   private static PixelsFactory pf; 
    53   private static RemoteCaller rc; 
    54   private static DataServices rs; 
    55   private static String omeis; 
     45  // -- Constants -- 
     46 
     47  private static final String NO_OMERO_MSG = "OMERO client libraries not " + 
     48    "found.  Please obtain omero-common.jar and omero-client.jar from " + 
     49    "http://www.loci.wisc.edu/ome/formats.html"; 
     50 
     51  private static final String NO_OME_MSG = "OME-Java library not found.  " + 
     52    "Please obtain ome-java.jar from http://www.loci.wisc.edu/ome/formats.html"; 
     53 
     54  // -- Static fields -- 
     55 
     56  private static boolean noOME = false; 
     57  private static boolean noOMERO = false; 
     58  private static ReflectedUniverse r = createReflectedUniverse(); 
     59  private static ReflectedUniverse createReflectedUniverse() { 
     60    r = new ReflectedUniverse(); 
     61    try { 
     62      r.exec("import ome.api.IQuery"); 
     63      r.exec("import ome.api.RawPixelsStore"); 
     64      r.exec("import ome.api.ThumbnailStore"); 
     65      r.exec("import ome.parameters.Filter"); 
     66      r.exec("import ome.parameters.Parameters"); 
     67      r.exec("import ome.system.Login"); 
     68      r.exec("import ome.system.Server"); 
     69      r.exec("import ome.system.ServiceFactory"); 
     70      r.exec("import pojos.ImageData"); 
     71      r.exec("import pojos.PixelsData"); 
     72      r.exec("import pojos.ProjectData"); 
     73    } 
     74    catch (ReflectException e) { 
     75      noOMERO = true; 
     76      LogTools.trace(e); 
     77    } 
     78    try { 
     79      r.exec("import java.util.Hashtable"); 
     80      r.exec("import java.util.List"); 
     81      r.exec("import org.openmicroscopy.ds.Criteria"); 
     82      r.exec("import org.openmicroscopy.ds.DataFactory"); 
     83      r.exec("import org.openmicroscopy.ds.DataServer"); 
     84      r.exec("import org.openmicroscopy.ds.DataServices"); 
     85      r.exec("import org.openmicroscopy.ds.RemoteCaller"); 
     86      r.exec("import org.openmicroscopy.ds.dto.Image"); 
     87      r.exec("import org.openmicroscopy.ds.st.Pixels"); 
     88      r.exec("import org.openmicroscopy.ds.st.Repository"); 
     89      r.exec("import org.openmicroscopy.is.PixelsFactory"); 
     90    } 
     91    catch (ReflectException e) { 
     92      noOME = true; 
     93      LogTools.trace(e); 
     94    } 
     95    return r; 
     96  } 
    5697 
    5798  // -- Utils API methods -- 
    5899 
    59   /** Login to the OME database */ 
    60   public static void login(String server, String user, String pass) 
    61     throws MalformedURLException 
     100  /** 
     101   * Get credentials from a string. 
     102   */ 
     103  public static OMECredentials parseCredentials(String s) { 
     104    if (s == null || s.trim().equals("")) return null; 
     105 
     106    OMECredentials credentials = new OMECredentials(); 
     107 
     108    if (s.indexOf("\n") != -1) { 
     109      StringTokenizer st = new StringTokenizer(s, "\n"); 
     110      String token = null; 
     111      while (st.hasMoreTokens()) { 
     112        token = st.nextToken(); 
     113        String key = token.substring(0, token.indexOf("=")).trim(); 
     114        String value = token.substring(token.indexOf("=") + 1).trim(); 
     115        if (key.equals("server")) credentials.server = value; 
     116        else if (key.equals("username")) credentials.username = value; 
     117        else if (key.equals("port")) credentials.port = value; 
     118        else if (key.equals("password")) credentials.password = value; 
     119        else if (key.equals("id")) credentials.imageID = Long.parseLong(value); 
     120      } 
     121    } 
     122    else { 
     123      credentials.server = s.substring(0, s.lastIndexOf("?")); 
     124 
     125      int first = credentials.server.indexOf(":"); 
     126      int last = credentials.server.lastIndexOf(":"); 
     127      if (credentials.server.indexOf("http://") == -1) { 
     128        first = 0; 
     129        if (last < 0) last = 0; 
     130      } 
     131      if (first != last) { 
     132        credentials.port = credentials.server.substring(last + 1); 
     133        credentials.server = credentials.server.substring(0, last); 
     134      } 
     135 
     136      int ndx = s.indexOf("&"); 
     137      credentials.username = s.substring(s.lastIndexOf("?") + 6, ndx); 
     138      credentials.password = s.substring(ndx + 10, s.indexOf("&", ndx + 1)); 
     139      ndx = s.indexOf("&", ndx + 1); 
     140      credentials.imageID = Long.parseLong(s.substring(ndx + 4)); 
     141    } 
     142    return credentials; 
     143  } 
     144 
     145  /** Login to an OME/OMERO server. */ 
     146  public static void login(OMECredentials credentials) throws ReflectException 
    62147  { 
    63     omeis = server; 
    64     if (omeis.indexOf("http://") != -1) { 
    65       omeis = omeis.substring(7, omeis.length()); 
    66     } 
    67     omeis = "http://" + omeis.substring(0, omeis.indexOf("/")) + 
    68       "/cgi-bin/omeis"; 
    69  
    70     rs = DataServer.getDefaultServices(server); 
    71     rc = rs.getRemoteCaller(); 
    72     rc.login(user, pass); 
    73     df = (DataFactory) rs.getService(DataFactory.class); 
    74     pf = (PixelsFactory) rs.getService(PixelsFactory.class); 
    75     loggedIn = true; 
    76   } 
    77  
    78   /** Login to the OME database */ 
    79   public static void login(String server, String sessionKey) 
    80     throws MalformedURLException 
     148    r.setVar("user", credentials.username); 
     149    r.setVar("pass", credentials.password); 
     150    r.setVar("sname", credentials.server); 
     151 
     152    if (credentials.isOMERO) { 
     153      r.setVar("port", Integer.parseInt(credentials.port)); 
     154      r.exec("login = new Login(user, pass)"); 
     155      r.exec("server = new Server(sname, port)"); 
     156      r.exec("sf = new ServiceFactory(server, login)"); 
     157    } 
     158    else { 
     159      String s = (String) r.getVar("sname"); 
     160      if (s.indexOf("http://") != -1) { 
     161        s = s.substring(7, s.length()); 
     162      } 
     163      s = "http://" + s.substring(0, s.indexOf("/")) + "/shoola"; 
     164      credentials.server = s; 
     165      r.setVar("sname", s); 
     166 
     167      try { 
     168        r.setVar("dfClass", Class.forName("org.openmicroscopy.ds.DataFactory")); 
     169        r.setVar("pfClass", 
     170          Class.forName("org.openmicroscopy.is.PixelsFactory")); 
     171      } 
     172      catch (ClassNotFoundException e) { 
     173        throw new ReflectException(e); 
     174      } 
     175 
     176      r.exec("rs = DataServer.getDefaultServices(sname)"); 
     177      r.exec("rc = rs.getRemoteCaller()"); 
     178      r.exec("rc.login(user, pass)"); 
     179      r.exec("df = rs.getService(dfClass)"); 
     180      r.exec("pf = rs.getService(pfClass)"); 
     181    } 
     182  } 
     183 
     184  /** Log out of OME/OMERO server. */ 
     185  public static void logout() { 
     186 
     187  } 
     188 
     189  /** Get the width of every accessible image on the server. */ 
     190  public static int[] getAllWidths(boolean isOMERO) throws ReflectException { 
     191    if (isOMERO) return getIntValues("getSizeX"); 
     192    return getOMEIntValues("getSizeX"); 
     193  } 
     194 
     195  /** Get the height of every accessible image on the server. */ 
     196  public static int[] getAllHeights(boolean isOMERO) throws ReflectException { 
     197    if (isOMERO) return getIntValues("getSizeY"); 
     198    return getOMEIntValues("getSizeY"); 
     199  } 
     200 
     201  /** Get the channel count of every accessible image on the server. */ 
     202  public static int[] getAllChannels(boolean isOMERO) throws ReflectException { 
     203    if (isOMERO) return getIntValues("getSizeC"); 
     204    return getOMEIntValues("getSizeC"); 
     205  } 
     206 
     207  /** Get the number of Z slices in each accessible image on the server. */ 
     208  public static int[] getAllZs(boolean isOMERO) throws ReflectException { 
     209    if (isOMERO) return getIntValues("getSizeZ"); 
     210    return getOMEIntValues("getSizeZ"); 
     211  } 
     212 
     213  /** Get the number of timepoints in each accessible image on the server. */ 
     214  public static int[] getAllTs(boolean isOMERO) throws ReflectException { 
     215    if (isOMERO) return getIntValues("getSizeT"); 
     216    return getOMEIntValues("getSizeT"); 
     217  } 
     218 
     219  /** Get the pixel type of each accessible image on the server. */ 
     220  public static String[] getAllTypes(boolean isOMERO) throws ReflectException { 
     221    if (isOMERO) return getStringValues("getPixelType"); 
     222    return getOMEStringValues("getPixelType"); 
     223  } 
     224 
     225  /** Get the name of each accessible image on the server. */ 
     226  public static String[] getAllNames(boolean isOMERO) throws ReflectException { 
     227    if (isOMERO) { 
     228      getAllPixels(); 
     229      int len = ((Integer) r.getVar("len")).intValue(); 
     230      String[] rtn = new String[len]; 
     231      for (int i=0; i<len; i++) { 
     232        r.setVar("i", i); 
     233        r.exec("obj = results.get(i)"); 
     234        r.exec("obj = new PixelsData(obj)"); 
     235        r.exec("image = obj.getImage()"); 
     236        r.exec("name = image.getName()"); 
     237        rtn[i] = (String) r.getVar("name"); 
     238      } 
     239      return rtn; 
     240    } 
     241 
     242    getAllImages(); 
     243    r.exec("len = l.size()"); 
     244    int len = ((Integer) r.getVar("len")).intValue(); 
     245    String[] rtn = new String[len]; 
     246    for (int i=0; i<len; i++) { 
     247      r.setVar("i", i); 
     248      r.exec("omeImage = l.get(i)"); 
     249      r.exec("v = omeImage.getName()"); 
     250      rtn[i] = (String) r.getVar("v"); 
     251    } 
     252    return rtn; 
     253  } 
     254 
     255  /** Get the description of each accessible image on the server. */ 
     256  public static String[] getAllDescriptions(boolean isOMERO) 
     257    throws ReflectException 
    81258  { 
    82     omeis = server; 
    83     if (omeis.indexOf("http://") != -1) { 
    84       omeis = omeis.substring(7, omeis.length()); 
    85     } 
    86     omeis = "http://" + omeis.substring(0, omeis.indexOf("/")) + 
    87       "/cgi-bin/omeis"; 
    88  
    89     rs = DataServer.getDefaultServices(server); 
    90     rc = rs.getRemoteCaller(); 
    91     rc.setSessionKey(sessionKey); 
    92     df = (DataFactory) rs.getService(DataFactory.class); 
    93     pf = (PixelsFactory) rs.getService(PixelsFactory.class); 
    94     loggedIn = true; 
    95   } 
    96  
    97   /** Retrieve a list of all images in the database. */ 
    98   public static Image[] getAllImages() { 
    99     if (!loggedIn) return null; 
    100     Criteria c = new Criteria(); 
    101     setImageCriteria(c); 
    102  
    103     List l = df.retrieveList(Image.class, c); 
    104     return (Image[]) l.toArray(new Image[0]); 
    105   } 
    106  
    107   /** Retrieve a list of all image IDs in the database. */ 
    108   public static int[] getAllImageIDs() { 
    109     Image[] images = getAllImages(); 
    110     if (images == null) return null; 
    111     int[] ids = new int[images.length]; 
    112     for (int i=0; i<images.length; i++) { 
    113       ids[i] = images[i].getID(); 
    114     } 
    115     return ids; 
    116   } 
    117  
    118   /** 
    119    * Display a OMETablePanel using the given IDs. 
    120    * @return a list of Image IDs 
    121    */ 
    122   public static int[] showTable(int[] ids) throws ImageServerException { 
    123     Image[] images = new Image[ids.length]; 
    124     for (int i=0; i<ids.length; i++) { 
    125       Criteria c = new Criteria(); 
    126       setImageCriteria(c); 
    127       c.addFilter("id", "=", "" + ids[i]); 
    128       images[i] = (Image) df.retrieve(Image.class, c); 
    129     } 
    130     return showTable(images); 
    131   } 
    132  
    133   /** 
    134    * Display a OMETablePanel using the given Images. 
    135    * @return a list of Image IDs 
    136    */ 
    137   public static int[] showTable(Image[] images) throws ImageServerException { 
    138     if (!loggedIn) return null; 
    139     Criteria c = new Criteria(); 
    140     c.addWantedField("FirstName"); 
    141     c.addWantedField("LastName"); 
    142     c.addOrderBy("LastName"); 
    143  
    144     List l = df.retrieveList("Experimenter", c); 
    145     String[][] experimenters = new String[3][l.size()]; 
    146     for (int i=0; i<l.size(); i++) { 
    147       experimenters[0][i] = ((Experimenter) l.get(i)).getFirstName(); 
    148       experimenters[1][i] = ((Experimenter) l.get(i)).getLastName(); 
    149       experimenters[2][i] = "" + ((Experimenter) l.get(i)).getID(); 
    150     } 
    151  
    152     Hashtable exps = new Hashtable(experimenters.length); 
    153     for (int i=0; i<experimenters[0].length; i++) { 
    154       exps.put(new Integer(experimenters[2][i]), experimenters[1][i] + ", " + 
    155         experimenters[0][i]); 
    156     } 
    157  
    158     int numImages = images.length; 
    159     Object[][] props = new Object[numImages][4]; 
    160     Object[][] details = new Object[numImages][10]; 
    161  
    162     Pixels p; 
    163     for (int i=0; i<props.length; i++) { 
    164       props[i][0] = new Boolean(false); 
    165       props[i][1] = images[i].getName() == null ? "" : images[i].getName(); 
    166       props[i][2] = String.valueOf(images[i].getID()); 
    167       props[i][3] = images[i].getCreated() == null ? "" : 
    168         images[i].getCreated(); 
    169       p = images[i].getDefaultPixels(); 
    170  
    171       Repository r = p.getRepository(); 
    172       r.setImageServerURL(omeis); 
    173       p.setRepository(r); 
    174  
    175       if (p == null) continue; 
    176       try { 
    177         details[i][0] = pf.getThumbnail(p); 
    178       } 
    179       catch (NullPointerException e) { details[i][0] = null; } 
    180       details[i][1] = 
    181         (String) exps.get(new Integer(images[i].getOwner().getID())); 
    182       details[i][2] = p.getPixelType() == null ? "" : p.getPixelType(); 
    183       details[i][3] = p.getSizeX() == null ? "0" : p.getSizeX().toString(); 
    184       details[i][4] = p.getSizeY() == null ? "0" : p.getSizeY().toString(); 
    185       details[i][5] = p.getSizeZ() == null ? "0" : p.getSizeZ().toString(); 
    186       details[i][6] = p.getSizeC() == null ? "0" : p.getSizeC().toString(); 
    187       details[i][7] = p.getSizeT() == null ? "0" : p.getSizeT().toString(); 
    188       details[i][8] = images[i].getDescription(); 
    189       details[i][9] = props[i][2] == null ? "-1" : props[i][2]; 
    190     } 
    191  
    192     // make sure nothing is null 
    193     for (int i=0; i<numImages; i++) { 
    194       for (int j=0; j<props[i].length; j++) { 
    195         if (props[i][j] == null) props[i][j] = new Object(); 
    196       } 
    197       for (int j=2; j<details[i].length; j++) { 
    198         if (details[i][j] == null) details[i][j] = new String(); 
    199       } 
    200     } 
    201  
    202     String[] columns = {"", "Name", "ID", "Date Created", "SizeX", "SizeY", 
    203       "SizeZ", "SizeC", "SizeT"}; 
    204  
    205     GenericDialog gd = new GenericDialog("OME Plugin"); 
    206  
     259    if (isOMERO) { 
     260      getAllPixels(); 
     261      int len = ((Integer) r.getVar("len")).intValue(); 
     262      String[] rtn = new String[len]; 
     263      for (int i=0; i<len; i++) { 
     264        r.setVar("i", i); 
     265        r.exec("obj = results.get(i)"); 
     266        r.exec("obj = new PixelsData(obj)"); 
     267        r.exec("image = obj.getImage()"); 
     268        r.exec("name = image.getDescription()"); 
     269        rtn[i] = (String) r.getVar("name"); 
     270      } 
     271      return rtn; 
     272    } 
     273 
     274    getAllImages(); 
     275    r.exec("len = l.size()"); 
     276    int len = ((Integer) r.getVar("len")).intValue(); 
     277    String[] rtn = new String[len]; 
     278    for (int i=0; i<len; i++) { 
     279      r.setVar("i", i); 
     280      r.exec("omeImage = l.get(i)"); 
     281      r.exec("v = omeImage.getDescription()"); 
     282      rtn[i] = (String) r.getVar("v"); 
     283    } 
     284    return rtn; 
     285  } 
     286 
     287  /** Get the creation date of each accessible image on the server. */ 
     288  public static String[] getAllDates(boolean isOMERO) throws ReflectException { 
     289    if (isOMERO) { 
     290      getAllPixels(); 
     291      int len = ((Integer) r.getVar("len")).intValue(); 
     292      String[] rtn = new String[len]; 
     293      for (int i=0; i<len; i++) { 
     294        r.setVar("i", i); 
     295        r.exec("obj = results.get(i)"); 
     296        r.exec("obj = new PixelsData(obj)"); 
     297        r.exec("image = obj.getImage()"); 
     298        try {  
     299          r.exec("name = image.getInserted()");  
     300          rtn[i] = ((Timestamp) r.getVar("name")).toString(); 
     301        } 
     302        catch (Exception e) {  
     303          rtn[i] = new Timestamp(System.currentTimeMillis()).toString(); 
     304        } 
     305      } 
     306      return rtn; 
     307    } 
     308 
     309    getAllImages(); 
     310    r.exec("len = l.size()"); 
     311    int len = ((Integer) r.getVar("len")).intValue(); 
     312    String[] rtn = new String[len]; 
     313    for (int i=0; i<len; i++) { 
     314      r.setVar("i", i); 
     315      r.exec("omeImage = l.get(i)"); 
     316      r.exec("v = omeImage.getCreated()"); 
     317      rtn[i] = (String) r.getVar("v"); 
     318    } 
     319    return rtn; 
     320  } 
     321 
     322  /** Get the thumbnail for each accessible image on the server. */ 
     323  public static BufferedImage[] getAllThumbnails(boolean isOMERO) 
     324    throws ReflectException 
     325  { 
     326    if (isOMERO) { 
     327      return new BufferedImage[((Integer) r.getVar("len")).intValue()]; 
     328    } 
     329 
     330    getAllImages(); 
     331    r.exec("len = l.size()"); 
     332    int len = ((Integer) r.getVar("len")).intValue(); 
     333    BufferedImage[] rtn = new BufferedImage[len]; 
     334    for (int i=0; i<len; i++) { 
     335      r.setVar("i", i); 
     336      r.exec("omeImage = l.get(i)"); 
     337      r.exec("omePix = omeImage.getDefaultPixels()"); 
     338      r.exec("v = pf.getThumbnail(omePix)"); 
     339      rtn[i] = (BufferedImage) r.getVar("v"); 
     340    } 
     341    return rtn; 
     342  } 
     343 
     344  /** Get all of the image IDs. */ 
     345  public static long[] getAllIDs(boolean isOMERO) throws ReflectException { 
     346    if (isOMERO) return getLongValues("getId"); 
     347 
     348    getAllImages(); 
     349    r.exec("len = l.size()"); 
     350    int len = ((Integer) r.getVar("len")).intValue(); 
     351    long[] rtn = new long[len]; 
     352    for (int i=0; i<len; i++) { 
     353      r.setVar("i", i); 
     354      r.exec("omeImage = l.get(i)"); 
     355      r.exec("v = omeImage.getID()"); 
     356      rtn[i] = ((Integer) r.getVar("v")).intValue(); 
     357    } 
     358    return rtn; 
     359  } 
     360 
     361  public long[] showTable(OMECredentials cred) throws ReflectException { 
     362    long[] ids = getAllIDs(cred.isOMERO); 
     363    int[] x = getAllWidths(cred.isOMERO); 
     364    int[] y = getAllHeights(cred.isOMERO); 
     365    int[] z = getAllZs(cred.isOMERO); 
     366    int[] c = getAllChannels(cred.isOMERO); 
     367    int[] t = getAllTs(cred.isOMERO); 
     368    String[] types = getAllTypes(cred.isOMERO); 
     369    String[] names = getAllNames(cred.isOMERO); 
     370    String[] descr = getAllDescriptions(cred.isOMERO); 
     371    String[] created = getAllDates(cred.isOMERO); 
     372    BufferedImage[] thumbs = getAllThumbnails(cred.isOMERO); 
     373 
     374    // TODO : consolidate this with ImporterOptions.promptSeries logic. 
     375 
     376    GenericDialog gd = new GenericDialog("OME/OMERO Plugin"); 
    207377    GridBagLayout gdl = (GridBagLayout) gd.getLayout(); 
    208378    GridBagConstraints gbc = new GridBagConstraints(); 
     379 
    209380    gbc.gridx = 2; 
    210381    gbc.gridwidth = GridBagConstraints.REMAINDER; 
    211382 
    212     JPanel[] panes = new JPanel[numImages]; 
    213     for (int i=0; i<numImages; i++) { 
    214       gd.addCheckbox((String) props[i][1], false); 
    215       panes[i] = new JPanel(); 
    216       gbc.gridy = i; 
    217  
     383    Panel[] p = new Panel[ids.length]; 
     384    String[] tips = new String[ids.length]; 
     385    for (int i=0; i<ids.length; i++) { 
    218386      StringBuffer tip = new StringBuffer(); 
    219       tip.append("<HTML>"); 
    220       tip.append("Name: "); 
    221       tip.append((String) props[i][1]); 
     387      tip.append("<HTML>Name: "); 
     388      tip.append(names[i]); 
    222389      tip.append("<BR>ID: "); 
    223       tip.append((String) props[i][2]); 
     390      tip.append(ids[i]); 
    224391      tip.append("<BR>Date Created: "); 
    225       tip.append((String) props[i][3]); 
     392      tip.append(created[i]); 
    226393      tip.append("<BR>Pixel type: "); 
    227       tip.append((String) details[i][2]); 
     394      tip.append(types[i]); 
    228395      tip.append("<BR>SizeX: "); 
    229       tip.append((String) details[i][3]); 
     396      tip.append(x[i]); 
    230397      tip.append("<BR>SizeY: "); 
    231       tip.append((String) details[i][4]); 
     398      tip.append(y[i]); 
    232399      tip.append("<BR>SizeZ: "); 
    233       tip.append((String) details[i][5]); 
     400      tip.append(z[i]); 
    234401      tip.append("<BR>SizeC: "); 
    235       tip.append((String) details[i][6]); 
     402      tip.append(c[i]); 
    236403      tip.append("<BR>SizeT: "); 
    237       tip.append((String) details[i][7]); 
     404      tip.append(t[i]); 
    238405      tip.append("<BR>Description: "); 
    239       tip.append((String) details[i][8]); 
     406      tip.append(descr[i]); 
    240407      tip.append("</HTML>"); 
    241408 
    242       BufferedImage img = (BufferedImage) details[i][0]; 
    243       panes[i].add(new JLabel(new ImageIcon(img))); 
    244       panes[i].setToolTipText(tip.toString()); 
    245       gdl.setConstraints(panes[i], gbc); 
    246       gd.add(panes[i]); 
     409      tips[i] = tip.toString(); 
     410 
     411      if (names[i].indexOf(File.separator) != -1) { 
     412        names[i] = names[i].substring(names[i].lastIndexOf(File.separator) + 1); 
     413      } 
     414 
     415      gd.addCheckbox(names[i], false); 
     416      p[i] = new Panel(); 
     417      if (cred.isOMERO) { 
     418        p[i].add(Box.createRigidArea(new Dimension(128, 128))); 
     419        gbc.gridy = i; 
     420      } 
     421      else { 
     422        gbc.gridy = i; 
     423        JLabel label = new JLabel(new ImageIcon(thumbs[i])); 
     424        label.setToolTipText(tips[i]); 
     425        p[i].add(label); 
     426      } 
     427      gdl.setConstraints(p[i], gbc); 
     428      gd.add(p[i]); 
    247429    } 
    248430    Util.addScrollBars(gd); 
    249     gd.showDialog(); 
     431    if (cred.isOMERO) { 
     432      OMEROLoader l = new OMEROLoader(ids, cred, p, gd, tips); 
     433      gd.showDialog(); 
     434      l.stop(); 
     435    } 
     436    else gd.showDialog(); 
    250437    if (gd.wasCanceled()) return null; 
    251438 
    252     boolean[] checked = new boolean[numImages]; 
     439    boolean[] checked = new boolean[ids.length]; 
    253440    int numChecked = 0; 
    254     for (int i=0; i<numImages; i++) { 
     441    for (int i=0; i<ids.length; i++) { 
    255442      checked[i] = gd.getNextBoolean(); 
    256443      if (checked[i]) numChecked++; 
    257444    } 
    258445 
    259     int[] results = new int[numChecked]; 
     446    long[] results = new long[numChecked]; 
    260447    int n = 0; 
    261     for (int i=0; i<numImages; i++) { 
    262       if (checked[i]) { 
    263         results[n] = Integer.parseInt((String) props[i][2]); 
    264         n++; 
    265       } 
     448    for (int i=0; i<ids.length; i++) { 
     449      if (checked[i]) results[n++] = ids[i]; 
    266450    } 
    267451    return results; 
    268452  } 
    269453 
    270   /** Set up a Criteria object for retrieving Images. */ 
    271   public static void setImageCriteria(Criteria c) { 
    272     c.addWantedField("id"); 
    273     c.addWantedField("name"); 
    274     c.addWantedField("description"); 
    275     c.addWantedField("inserted"); 
    276     c.addWantedField("created"); 
    277     c.addWantedField("owner"); 
    278     c.addWantedField("default_pixels"); 
    279     c.addWantedField("owner", "FirstName"); 
    280     c.addWantedField("owner", "LastName"); 
    281     c.addWantedField("owner", "id"); 
    282     c.addWantedField("default_pixels", "id"); 
    283     c.addWantedField("default_pixels", "SizeX"); 
    284     c.addWantedField("default_pixels", "SizeY"); 
    285     c.addWantedField("default_pixels", "SizeZ"); 
    286     c.addWantedField("default_pixels", "SizeC"); 
    287     c.addWantedField("default_pixels", "SizeT"); 
    288     c.addWantedField("default_pixels", "PixelType"); 
    289     c.addWantedField("default_pixels", "Repository"); 
    290     c.addWantedField("default_pixels", "ImageServerID"); 
    291     c.addWantedField("default_pixels.Repository", "ImageServerURL"); 
     454  // -- OME-specific helper methods -- 
     455 
     456  private static void getAllImages() throws ReflectException { 
     457    r.exec("c = new Criteria()"); 
     458    setImageCriteria(); 
     459    try { 
     460      r.setVar("imageClass", Class.forName("org.openmicroscopy.ds.dto.Image")); 
     461    } 
     462    catch (ClassNotFoundException e) { 
     463      throw new ReflectException(e); 
     464    } 
     465    r.exec("l = df.retrieveList(imageClass, c)"); 
     466  } 
     467 
     468  private static int[] getOMEIntValues(String func) throws ReflectException { 
     469    getAllImages(); 
     470    r.exec("len = l.size()"); 
     471    int len = ((Integer) r.getVar("len")).intValue(); 
     472    int[] rtn = new int[len]; 
     473    for (int i=0; i<len; i++) { 
     474      r.setVar("i", i); 
     475      r.exec("omeImage = l.get(i)"); 
     476      r.exec("omePix = omeImage.getDefaultPixels()"); 
     477      r.exec("v = omePix." + func + "()"); 
     478      rtn[i] = ((Integer) r.getVar("v")).intValue(); 
     479    } 
     480    return rtn; 
     481  } 
     482 
     483  private static String[] getOMEStringValues(String func) 
     484    throws ReflectException 
     485  { 
     486    getAllImages(); 
     487    r.exec("len = l.size()"); 
     488    int len = ((Integer) r.getVar("len")).intValue(); 
     489    String[] rtn = new String[len]; 
     490    for (int i=0; i<len; i++) { 
     491      r.setVar("i", i); 
     492      r.exec("omeImage = l.get(i)"); 
     493      r.exec("omePix = omeImage.getDefaultPixels()"); 
     494      r.exec("v = omePix." + func + "()"); 
     495      rtn[i] = (String) r.getVar("v"); 
     496    } 
     497    return rtn; 
     498  } 
     499 
     500  private static void setImageCriteria() throws ReflectException { 
     501    r.setVar("OME_ID", "id"); 
     502    r.setVar("OME_NAME", "name"); 
     503    r.setVar("OME_DESCRIPTION", "description"); 
     504    r.setVar("OME_INSERTED", "inserted"); 
     505    r.setVar("OME_CREATED", "created"); 
     506    r.setVar("OME_OWNER", "owner"); 
     507    r.setVar("OME_DEFAULT_PIXELS", "default_pixels"); 
     508    r.setVar("OME_FIRST_NAME", "FirstName"); 
     509    r.setVar("OME_LAST_NAME", "LastName"); 
     510    r.setVar("OME_SIZE_X", "SizeX"); 
     511    r.setVar("OME_SIZE_Y", "SizeY"); 
     512    r.setVar("OME_SIZE_Z", "SizeZ"); 
     513    r.setVar("OME_SIZE_C", "SizeC"); 
     514    r.setVar("OME_SIZE_T", "SizeT"); 
     515    r.setVar("OME_PIXEL_TYPE", "PixelType"); 
     516    r.setVar("OME_REPOSITORY", "Repository"); 
     517    r.setVar("OME_IS_ID", "ImageServerID"); 
     518    r.setVar("OME_DP_REPOSITORY", "default_pixels.Repository"); 
     519    r.setVar("OME_IS_URL", "ImageServerURL"); 
     520    r.exec("c.addWantedField(OME_ID)"); 
     521    r.exec("c.addWantedField(OME_NAME)"); 
     522    r.exec("c.addWantedField(OME_DESCRIPTION)"); 
     523    r.exec("c.addWantedField(OME_INSERTED)"); 
     524    r.exec("c.addWantedField(OME_CREATED)"); 
     525    r.exec("c.addWantedField(OME_OWNER)"); 
     526    r.exec("c.addWantedField(OME_DEFAULT_PIXELS)"); 
     527    r.exec("c.addWantedField(OME_OWNER, OME_FIRST_NAME)"); 
     528    r.exec("c.addWantedField(OME_OWNER, OME_LAST_NAME)"); 
     529    r.exec("c.addWantedField(OME_OWNER, OME_ID)"); 
     530    r.exec("c.addWantedField(OME_DEFAULT_PIXELS, OME_ID)"); 
     531    r.exec("c.addWantedField(OME_DEFAULT_PIXELS, OME_SIZE_X)"); 
     532    r.exec("c.addWantedField(OME_DEFAULT_PIXELS, OME_SIZE_Y)"); 
     533    r.exec("c.addWantedField(OME_DEFAULT_PIXELS, OME_SIZE_Z)"); 
     534    r.exec("c.addWantedField(OME_DEFAULT_PIXELS, OME_SIZE_C)"); 
     535    r.exec("c.addWantedField(OME_DEFAULT_PIXELS, OME_SIZE_T)"); 
     536    r.exec("c.addWantedField(OME_DEFAULT_PIXELS, OME_PIXEL_TYPE)"); 
     537    r.exec("c.addWantedField(OME_DEFAULT_PIXELS, OME_REPOSITORY)"); 
     538    r.exec("c.addWantedField(OME_DEFAULT_PIXELS, OME_IS_ID)"); 
     539    r.exec("c.addWantedField(OME_DP_REPOSITORY, OME_IS_URL)"); 
     540  } 
     541 
     542  // -- OMERO-specific helper methods -- 
     543 
     544  private static void getAllPixels() throws ReflectException { 
     545    r.exec("thumbs = sf.createThumbnailService()"); 
     546    r.exec("admin = sf.getAdminService()"); 
     547    r.exec("eventContext = admin.getEventContext()"); 
     548    r.exec("uid = eventContext.getCurrentUserId()"); 
     549    r.exec("filter = new Filter()"); 
     550    r.exec("filter.owner(uid)"); 
     551    r.exec("query = sf.getQueryService()"); 
     552    r.setVar("q", "select p from Pixels as p " + 
     553      "left outer join fetch p.pixelsDimensions " + 
     554      "left outer join fetch p.pixelsType " + 
     555      "left outer join fetch p.channels " + 
     556      "left outer join fetch p.image"); 
     557    r.exec("params = new Parameters(filter)"); 
     558    r.exec("params.addId(uid)"); 
     559    r.exec("results = query.findAllByQuery(q, params)"); 
     560    r.exec("len = results.size()"); 
     561  } 
     562 
     563  private static int[] getIntValues(String func) throws ReflectException { 
     564    getAllPixels(); 
     565    int len = ((Integer) r.getVar("len")).intValue(); 
     566    int[] rtn = new int[len]; 
     567    for (int i=0; i<len; i++) { 
     568      r.setVar("i", i); 
     569      r.exec("obj = results.get(i)"); 
     570      r.exec("obj = new PixelsData(obj)"); 
     571      r.exec("v = obj." + func + "()"); 
     572      rtn[i] = ((Integer) r.getVar("v")).intValue(); 
     573    } 
     574    return rtn; 
     575  } 
     576 
     577  private static long[] getLongValues(String func) throws ReflectException { 
     578    getAllPixels(); 
     579    int len = ((Integer) r.getVar("len")).intValue(); 
     580    long[] rtn = new long[len]; 
     581    for (int i=0; i<len; i++) { 
     582      r.setVar("i", i); 
     583      r.exec("obj = results.get(i)"); 
     584      r.exec("obj = new PixelsData(obj)"); 
     585      r.exec("v = obj." + func + "()"); 
     586      rtn[i] = ((Long) r.getVar("v")).longValue(); 
     587    } 
     588    return rtn; 
     589  } 
     590 
     591  private static String[] getStringValues(String func) throws ReflectException 
     592  { 
     593    getAllPixels(); 
     594    int len = ((Integer) r.getVar("len")).intValue(); 
     595    String[] rtn = new String[len]; 
     596    for (int i=0; i<len; i++) { 
     597      r.setVar("i", i); 
     598      r.exec("obj = results.get(i)"); 
     599      r.exec("obj = new PixelsData(obj)"); 
     600      r.exec("v = obj." + func + "()"); 
     601      rtn[i] = (String) r.getVar("v"); 
     602    } 
     603    return rtn; 
     604  } 
     605 
     606  // -- Helper class --  
     607 
     608  class OMEROLoader implements Runnable { 
     609    private long[] ids; 
     610    private Panel[] p; 
     611    private GenericDialog gd; 
     612    private boolean stop; 
     613    private Thread loader; 
     614    private OMECredentials cred; 
     615    private String[] tips; 
     616 
     617    // TODO : consolidate with ThumbLoader 
     618 
     619    public OMEROLoader(long[] ids, OMECredentials cred, Panel[] p, 
     620      GenericDialog gd, String[] tips) 
     621    { 
     622      this.ids = ids; 
     623      this.p = p; 
     624      this.gd = gd; 
     625      this.cred = cred; 
     626      this.tips = tips; 
     627 
     628      loader = new Thread(this, "OMERO-ThumbLoader"); 
     629      loader.start(); 
     630    } 
     631 
     632    public void stop() { 
     633      if (loader == null) return; 
     634      stop = true; 
     635      try { 
     636        loader.join(); 
     637        loader = null; 
     638      } 
     639      catch (InterruptedException exc) { 
     640        exc.printStackTrace(); 
     641      } 
     642    } 
     643 
     644    public void run() { 
     645      try { 
     646        OMEROReader r = new OMEROReader(); 
     647        for (int i=0; i<ids.length; i++) { 
     648          r.setId("server=" + cred.server + "\nusername=" + cred.username + 
     649            "\npassword=" + cred.password + "\nport=" + cred.port + "\nid=" + 
     650            ids[i]); 
     651          BufferedImage thumb = r.openThumbImage(0); 
     652          ImageIcon icon = new ImageIcon(thumb); 
     653          p[i].removeAll(); 
     654          JLabel label = new JLabel(icon); 
     655          label.setToolTipText(tips[i]); 
     656          p[i].add(label); 
     657          if (gd != null) gd.validate(); 
     658        } 
     659      } 
     660      catch (FormatException exc) { 
     661        exc.printStackTrace(); 
     662      } 
     663      catch (IOException exc) { 
     664        exc.printStackTrace(); 
     665      } 
     666    } 
     667 
    292668  } 
    293669 
  • trunk/loci/formats/ome/OMEWriter.java

    r3108 r3431  
    8585  } 
    8686 
    87   // -- OMEWriter API methods -- 
    88  
    89   public void setMetadata(MetadataRetrieve meta) { 
    90     metadata = meta; 
    91   } 
    92  
    9387  // -- Internal OMEWriter API methods -- 
    9488 
     
    110104 
    111105  // -- IFormatWriter API methods -- 
     106 
     107  /* @see loci.formats.IFormatWriter#setMetadata(MetadataRetrieve) */ 
     108  public void setMetadata(MetadataRetrieve meta) { 
     109    metadata = meta; 
     110  } 
    112111 
    113112  /* @see loci.formats.IFormatWriter#saveImage(Image, boolean) */ 
  • trunk/loci/plugins/Importer.java

    r3373 r3431  
    3333import loci.formats.*; 
    3434import loci.formats.ome.OMEReader; 
     35import loci.formats.ome.OMEROReader; 
    3536import loci.formats.ome.OMEXMLMetadata; 
    3637import loci.plugins.browser.LociDataBrowser; 
     
    107108      } 
    108109    } 
     110    else if (options.isOMERO()) r = new OMEROReader(); 
    109111    else { // options.isOME 
    110112      r = new OMEReader(); 
     
    137139    // -- Step 4: analyze and read from data source -- 
    138140 
    139     IJ.showStatus("Analyzing " + id); 
     141    // 'id' contains the user's password if we are opening from OME/OMERO 
     142    String a = id; 
     143    if (options.isOME() || options.isOMERO()) a = "..."; 
     144    IJ.showStatus("Analyzing " + a); 
    140145 
    141146    try { 
  • trunk/loci/plugins/ImporterOptions.java

    r3418 r3431  
    8686  public static final String LOCATION_HTTP = "Internet"; 
    8787  public static final String LOCATION_OME = "OME server"; 
     88  public static final String LOCATION_OMERO = "OMERO server"; 
    8889  public static final String[] LOCATIONS = { 
    89     LOCATION_LOCAL, LOCATION_HTTP, LOCATION_OME 
     90    LOCATION_LOCAL, LOCATION_HTTP, LOCATION_OME, LOCATION_OMERO 
    9091  }; 
    9192 
     
    208209  public boolean isHTTP() { return LOCATION_HTTP.equals(location); } 
    209210  public boolean isOME() { return LOCATION_OME.equals(location); } 
     211  public boolean isOMERO() { return LOCATION_OMERO.equals(location); } 
    210212 
    211213  public Location getIdLocation() { return idLoc; } 
     
    343345    boolean isHTTP = LOCATION_HTTP.equals(location); 
    344346    boolean isOME = LOCATION_OME.equals(location); 
    345     if (!isLocal && !isHTTP && !isOME) { 
     347    boolean isOMERO = LOCATION_OMERO.equals(location); 
     348    if (!isLocal && !isHTTP && !isOME && !isOMERO) { 
    346349      if (!quiet) IJ.error("Bio-Formats", "Invalid location: " + location); 
    347350      return STATUS_FINISHED; 
     
    830833    } 
    831834    else if (src == groupBox) { 
    832       if (groupBox.getState() && getLocation().equals(LOCATION_OME)) { 
     835      if (groupBox.getState() && (getLocation().equals(LOCATION_OME) || 
     836        getLocation().equals(LOCATION_OMERO))) 
     837      { 
    833838        groupBox.setState(false); 
    834839      } 
  • trunk/loci/plugins/OMEPlugin.java

    r3015 r3431  
    3232import java.awt.TextField; 
    3333import java.util.*; 
    34 import loci.ome.util.OMEUtils; 
    35 import org.openmicroscopy.ds.*; 
    36 import org.openmicroscopy.ds.dto.Image; 
    37 import org.openmicroscopy.ds.dto.Project; 
    38 import org.openmicroscopy.ds.st.Experimenter; 
    39 import org.openmicroscopy.is.PixelsFactory; 
     34import loci.formats.ReflectException; 
     35import loci.formats.ome.OMECredentials; 
     36import loci.formats.ome.OMEUtils; 
    4037 
    4138/** 
    4239 * OMEPlugin is the ImageJ Plugin that allows image import and exports from 
    43  * the OME database. 
     40 * OME and OMERO servers. 
    4441 * 
    4542 * <dl><dt><b>Source code:</b></dt> 
     
    5451  // -- Fields -- 
    5552 
    56   /** Current OME thread. */ 
    57   private Thread upThread; 
    58  
    59   /** Current OME data. */ 
    60   private ImageProcessor data; 
    61   private ImagePlus imageP; 
    62  
    63   /** Current OME server. */ 
    64   private String server; 
    65  
    66   /** Current OME username. */ 
    67   private String username; 
    68  
    69   /** Current OME password. */ 
    70   private String password; 
    71  
    72   /** Image Stack space or time domain.*/ 
    73   private int domainIndex; 
    74  
    75   /** Signals exit of plugin */ 
     53  private OMECredentials cred; 
    7654  private static boolean cancelPlugin; 
    77  
    78   /** Whether or not we're uploading. */ 
    79   private boolean upload; 
    80  
    81   /** Data for the current image. */ 
    82   private DataFactory df; 
    83   private PixelsFactory pf; 
    84   private RemoteCaller rc; 
    85   private DataServices rs; 
    8655 
    8756  // -- PlugIn API methods -- 
     
    10877    GenericDialog gd = new GenericDialog("OME Login"); 
    10978 
    110     String s = Prefs.get("downloader.server", ""); 
    111     if (s.startsWith("http:")) s = s.substring(5); 
    112     while (s.startsWith("/")) s = s.substring(1); 
    113     int slash = s.indexOf("/"); 
    114     if (slash >= 0) s = s.substring(0, slash); 
    115     int colon = s.indexOf(":"); 
    116     if (colon >= 0) s = s.substring(0, colon); 
    117  
    118     gd.addStringField("Server:   ", s, 30); 
    119     gd.addStringField("Username: ", Prefs.get("downloader.user", ""), 30); 
    120     gd.addStringField("Password: ", "", 30); 
     79    String server = Prefs.get("downloader.server", ""); 
     80    String user = Prefs.get("downloader.user", ""); 
     81    String port = Prefs.get("downloader.port", ""); 
     82 
     83    if (server.startsWith("http:")) server = server.substring(5); 
     84    while (server.startsWith("/")) server = server.substring(1); 
     85    int slash = server.indexOf("/"); 
     86    if (slash >= 0) server = server.substring(0, slash); 
     87    int colon = server.indexOf(":"); 
     88    if (colon >= 0) server = server.substring(0, colon); 
     89 
     90    gd.addChoice("Server type: ", new String[] {"OME", "OMERO"}, "OME"); 
     91    gd.addStringField("Server:      ", server, 30); 
     92    gd.addStringField("Port:        ", port, 30); 
     93    gd.addStringField("Username:    ", user, 30); 
     94    gd.addStringField("Password:    ", "", 30); 
    12195 
    12296    // star out the password field 
    12397 
    12498    Vector v = gd.getStringFields(); 
    125     ((TextField) v.get(2)).setEchoChar('*'); 
     99    ((TextField) v.get(3)).setEchoChar('*'); 
    126100 
    127101    gd.showDialog(); 
     
    131105    } 
    132106 
     107    String type = gd.getNextChoice(); 
     108 
    133109    server = gd.getNextString(); 
    134110 
    135111    // do sanity check on server name 
    136     if (server.startsWith("http:")) { 
    137       server = server.substring(5); 
    138     } 
    139     while (server.startsWith("/")) server = server.substring(1); 
    140     slash = server.indexOf("/"); 
    141     if (slash >= 0) server = server.substring(0, slash); 
    142     colon = server.indexOf(":"); 
    143     if (colon >= 0) server = server.substring(0, colon); 
     112    if (type.equals("OME")) { 
     113      if (server.startsWith("http:")) { 
     114        server = server.substring(5); 
     115      } 
     116      while (server.startsWith("/")) server = server.substring(1); 
     117      slash = server.indexOf("/"); 
     118      if (slash >= 0) server = server.substring(0, slash); 
     119      colon = server.indexOf(":"); 
     120      if (colon >= 0) server = server.substring(0, colon); 
     121      server = "http://" + server + "/shoola/"; 
     122    } 
     123 
     124    cred = new OMECredentials(); 
     125    cred.server = server; 
     126    cred.port = gd.getNextString(); 
     127    cred.username = gd.getNextString(); 
     128    cred.password = gd.getNextString(); 
     129    cred.isOMERO = type.equals("OMERO"); 
     130    try { 
     131      OMEUtils.login(cred); 
     132    } 
     133    catch (ReflectException e) { 
     134      IJ.error("Login failed"); 
     135      e.printStackTrace();  
     136      getInput(); 
     137    } 
    144138 
    145139    Prefs.set("downloader.server", server); 
    146  
    147     server = "http://" + server + "/shoola/"; 
    148  
    149     username = gd.getNextString(); 
    150     password = gd.getNextString(); 
    151  
    152     Prefs.set("downloader.user", username); 
     140    Prefs.set("downloader.user", cred.username); 
     141    Prefs.set("downloader.port", cred.port); 
    153142  } 
    154143 
    155144  public static void setPlugin(boolean isCancelled) { 
    156145    cancelPlugin = isCancelled; 
    157   } 
    158  
    159   /** 
    160    * Login to the OME database. 
    161    * This code has been adapted from Doug Creager's TestImport example. 
    162    */ 
    163   public void login() { 
    164     boolean error = false; 
    165     boolean loggedIn = false; 
    166     try { 
    167       IJ.showProgress(0); 
    168       getInput(); 
    169       if (cancelPlugin) { 
    170         return; 
    171       } 
    172       rs = DataServer.getDefaultServices(server); 
    173       rc = rs.getRemoteCaller(); 
    174       while(!loggedIn) { 
    175         if(cancelPlugin) { 
    176           return; 
    177         } 
    178         if(error) { 
    179           rs = DataServer.getDefaultServices(server); 
    180           rc = rs.getRemoteCaller(); 
    181         } 
    182         rc.login(username, password); 
    183         loggedIn = true; 
    184       } 
    185     } 
    186     catch(Exception e) { 
    187       IJ.error("Input Error", "The login information is not valid."); 
    188       login(); 
    189     } 
    190   } 
    191  
    192   // Get helper classes. 
    193   public void getHelpers() { 
    194     try { 
    195       IJ.showStatus("OME: Getting image information..."); 
    196       IJ.showProgress(.1); 
    197       if(cancelPlugin) { 
    198         return; 
    199       } 
    200       df = (DataFactory) rs.getService(DataFactory.class); 
    201       pf = (PixelsFactory) rs.getService(PixelsFactory.class); 
    202     } 
    203     catch(NullPointerException e) { 
    204       cancelPlugin = true; 
    205       getHelpers(); 
    206     } 
    207146  } 
    208147 
     
    211150    IJ.showStatus("OME: Logging out..."); 
    212151    IJ.showProgress(.99); 
    213     rc.logout(); 
     152    OMEUtils.logout(); 
    214153    IJ.showStatus("OME: Completed"); 
    215     IJ.showMessage("OME", "OME Transaction Completed"); 
    216154  } 
    217155 
    218156  // -- Download methods -- 
    219  
    220   /** returns a list of images that the user chooses */ 
    221   private Image[] getDownPicks(Image[] ima) { 
    222     if (cancelPlugin) return null; 
    223  
    224     try { 
    225       OMEUtils.login(server, username, password); 
    226       int[] results = OMEUtils.showTable(ima); 
    227       if (results == null) { 
    228         cancelPlugin = true; 
    229         return null; 
    230       } 
    231       Image[] returns = new Image[results.length]; 
    232       for (int i=0; i<returns.length; i++) { 
    233         Criteria c = new Criteria(); 
    234         OMEUtils.setImageCriteria(c); 
    235         c.addFilter("id", "=", "" + results[i]); 
    236         returns[i] = (Image) df.retrieve(Image.class, c); 
    237       } 
    238       return returns; 
    239     } 
    240     catch (Exception e) { 
    241       IJ.setColumnHeadings("Errors"); 
    242       IJ.write("An exception has occurred:  \n" + e.toString()); 
    243       IJ.showStatus("Error downloading (see error console for details)"); 
    244       e.printStackTrace(); 
    245     } 
    246     return null; 
    247   } 
    248157 
    249158  /** Does the work for downloading data from OME. */ 
    250159  public void runPlugin() { 
    251160    try { 
    252       login(); 
     161      getInput(); 
    253162      if (cancelPlugin) { 
    254163        cancelPlugin = false; 
    255164        return; 
    256165      } 
    257       getHelpers(); 
    258  
    259       //get database info to use in search 
    260       IJ.showStatus("Getting database info.."); 
    261  
    262       Criteria criteria = new Criteria(); 
    263       criteria.addWantedField("FirstName"); 
    264       criteria.addWantedField("LastName"); 
    265       criteria.addOrderBy("LastName"); 
    266  
    267       List l = df.retrieveList("Experimenter", criteria); 
    268       String[][] owners = new String[2][l.size() + 1]; 
    269       owners[0][0] = "All"; 
    270       owners[1][0] = "0"; 
    271       for (int i=1; i<=l.size(); i++) { 
    272         Experimenter e = (Experimenter) l.get(i - 1); 
    273         owners[0][i] = e.getFirstName() + " " + e.getLastName(); 
    274         owners[1][i] = "" + e.getID(); 
    275       } 
    276  
    277       criteria = new Criteria(); 
    278       criteria.addWantedField("id"); 
    279       criteria.addWantedField("name"); 
    280       criteria.addWantedField("datasets"); 
    281       criteria.addWantedField("datasets", "id"); 
    282       criteria.addWantedField("datasets", "name"); 
    283       criteria.addWantedField("datasets", "images"); 
    284  
    285       FieldsSpecification fs = new FieldsSpecification(); 
    286       fs.addWantedField("id"); 
    287       fs.addWantedField("experimenter"); 
    288       fs.addWantedField("experimenter", "id"); 
    289  
    290       Experimenter user = df.getUserState(fs).getExperimenter(); 
    291  
    292       criteria.addFilter("owner_id", new Integer(user.getID())); 
    293       criteria.addOrderBy("name"); 
    294       l = df.retrieveList(Project.class, criteria); 
    295       Project[] projects = (Project[]) l.toArray(new Project[0]); 
    296       String[] projectNames = new String[projects.length + 1]; 
    297       projectNames[0] = "All"; 
    298       for (int i=1; i<projectNames.length; i++) { 
    299         projectNames[i] = projects[i - 1].getName(); 
    300       } 
    301  
    302       //create search panel 
    303       IJ.showStatus("Creating search panel..."); 
    304       GenericDialog gd = new GenericDialog("OME Download Search"); 
    305       gd.addChoice("Project:    ", projectNames, "All"); 
    306       gd.addChoice("Owner:      ", owners[0], "All"); 
    307       gd.addStringField("Image ID:   ", "", 30); 
    308       gd.addStringField("Image Name: ", "", 30); 
    309       gd.showDialog(); 
    310       if (gd.wasCanceled()) { 
     166 
     167      long[] images = new OMEUtils().showTable(cred); 
     168      if (images == null || images.length == 0) { 
     169        logout(); 
    311170        return; 
    312171      } 
    313172 
    314       Image[] images = new Image[0]; 
    315  
    316       //do the image search 
    317       IJ.showStatus("Searching for images..."); 
    318  
    319       String project = gd.getNextChoice(); 
    320       String owner = gd.getNextChoice(); 
    321       String img = gd.getNextString(); 
    322       String imageName = gd.getNextString(); 
    323  
    324       while (images.length == 0) { 
    325         //get search results 
    326  
    327         if (img == null || img.length() == 0) img = "0"; 
    328         int imageId = new Integer(img).intValue(); 
    329  
    330         Criteria c = new Criteria(); 
    331         OMEUtils.setImageCriteria(c); 
    332  
    333         if (!owner.equals("All")) { 
    334           // TODO : add filters 
    335         } 
    336  
    337         if (!project.equals("All")) { 
    338           // TODO : add filters 
    339         } 
    340  
    341         l = df.retrieveList(Image.class, c); 
    342         images = (Image[]) l.toArray(new Image[0]); 
    343  
    344         if(images == null) images = new Image[0]; 
    345         if (images.length == 0) { 
    346           IJ.showMessage("OME Download", 
    347             "No images matched the specified criteria."); 
    348           return; 
    349         } 
    350         else { 
    351           //pick from results 
    352           images = getDownPicks(images); 
    353           if (cancelPlugin) { 
    354             return; 
    355           } 
    356         } 
    357         if (images == null) { 
    358           logout(); 
    359           return; 
    360         } 
    361       } 
    362       //download into ImageJ 
     173      // download into ImageJ 
    363174      for (int i=0; i<images.length; i++) { 
    364         String file = "location=[OME server] open=[" + server + "?user=" + 
    365           username + "&password=" + password + "&id=" + images[i].getID() + "]"; 
     175        String type = cred.isOMERO ? "OMERO server" : "OME server"; 
     176        String file = "location=[" + type + "] open=[" + cred.server + 
     177          (cred.isOMERO ? ":" + cred.port : "") + "?user=" + cred.username + 
     178          "&password=" + cred.password + "&id=" + images[i] + "]"; 
    366179        IJ.runPlugIn("loci.plugins.LociImporter", file); 
    367180 
    368         if (cancelPlugin) { 
    369           return; 
    370         } 
     181        if (cancelPlugin) return; 
    371182      } 
    372183      logout(); 
    373184    } 
    374     catch(NullPointerException e) { 
     185    catch (NullPointerException e) { 
    375186      e.printStackTrace(); 
    376187    } 
    377     catch(IllegalArgumentException f) { 
     188    catch (IllegalArgumentException f) { 
    378189      // do nothing; this means that the user cancelled the login procedure 
     190      f.printStackTrace(); 
    379191    } 
    380192    catch (Exception exc) { 
     
    385197    } 
    386198 
    387     upThread = null; 
    388199    IJ.showProgress(1); 
    389200  } 
  • trunk/loci/visbio/ome/OMEImage.java

    r3070 r3431  
    2929import javax.swing.JOptionPane; 
    3030import loci.formats.*; 
     31import loci.formats.ome.OMECredentials; 
    3132import loci.formats.ome.OMEReader; 
    32 import loci.ome.util.OMEUtils; 
     33import loci.formats.ome.OMEUtils; 
    3334import loci.visbio.*; 
    3435import loci.visbio.data.*; 
     
    7172 
    7273  /** ID for this image. */ 
    73   protected int imageId; 
     74  protected long imageId; 
    7475 
    7576  /** Optional task for constructor progress. */ 
     
    168169 
    169170  /** Gets the image ID for the associated OME image. */ 
    170   public int getImageId() { return imageId; } 
     171  public long getImageId() { return imageId; } 
    171172 
    172173  // -- ImageTransform API methods -- 
     
    193194   */ 
    194195  public static DataTransform makeTransform(DataManager dm, 
    195     String server, String sessionKey, String user, int imageId) 
     196    String server, String sessionKey, String user, long imageId) 
    196197  { 
    197198    String password = null; 
     
    214215      if (imageId < 0) { 
    215216        try { 
    216           OMEUtils.login(server, user, password); 
     217          OMECredentials cred = new OMECredentials(); 
     218          cred.username = user; 
     219          cred.server = server; 
     220          cred.password = password; 
     221          OMEUtils.login(cred); 
    217222 
    218223          // TODO : find a better way of handling multiple IDs 
    219           int[] results = OMEUtils.showTable(OMEUtils.getAllImages()); 
    220           if (results == null) results = new int[0]; 
     224          long[] results = new OMEUtils().showTable(cred); 
     225          if (results == null) results = new long[0]; 
    221226          if (results.length > 0) { 
    222227            imageId = results[0]; 
     
    250255    // make sure everything goes ok 
    251256    try { 
     257      // TODO 
    252258      return sessionKey != null ? 
    253         new OMEImage(server, sessionKey, imageId, task) : 
    254         new OMEImage(server, user, password, imageId, task); 
     259        new OMEImage(server, sessionKey, (int) imageId, task) : 
     260        new OMEImage(server, user, password, (int) imageId, task); 
    255261    } 
    256262    catch (Exception exc) { 
Note: See TracChangeset for help on using the changeset viewer.