/** @return la Hashtable donnant un objet Footprint d'après son nom */ public Hashtable<String, FootprintBean> getFooprintHash() { InputStream is; ResourceSet resSet = new ResourceSet(); try { // cas où on a passé un inputstream comme constructeur if (mis != null) { is = buildInputStream(); SavotPullParser parser = new SavotPullParser(is, SavotPullEngine.FULL, null, false); votable = parser.getVOTable(); resSet = votable.getResources(); } // cas où on a passé un tableau de SavotResource else { for (int i = 0; i < resources.length; i++) resSet.addItem(resources[i]); } } catch (Exception e) { e.printStackTrace(); Aladin.warning("Problem during parsing of footprints !"); return null; } int nbRes = resSet.getItemCount(); // System.out.println(nbRes); hash = new Hashtable<String, FootprintBean>(); for (int i = 0; i < nbRes; i++) { Aladin.trace(3, "Footprint: Processing resource: " + i); processFovResource((SavotResource) resSet.getItemAt(i)); } // new Footprint(raOffset,deOffset,) return hash; }
/** * construit le footprint associé à une RESOURCE * * @param res la RESOURCE "racine", pouvant contenir d'autres RESOURCE */ private void processFovResource(SavotResource res) { FootprintBean fpBean = new FootprintBean(); sphericalCoordinates = false; tabIndex = 0; SubFootprintBean sub; // System.out.println("Processing resource "+res); refMem = new Hashtable<String, MarkupComment>(); String id = res.getId(); // par défaut fpBean.setInstrumentName(id); // dangereux, car c'est sur cet ID qu'on va référencer un FoV // if( id==null || id.length()==0 ) id = res.getName(); // traitement des params au niveau RESOURCE ParamSet params = res.getParams(); int nbParam = params.getItemCount(); SavotParam param; for (int i = 0; i < nbParam; i++) { param = (SavotParam) params.getItemAt(i); if (param.getUtype().trim().equalsIgnoreCase(SPHERICAL_COORDS)) { sphericalCoordinates = true; } // position RA du FoV if (param.getUcd().equalsIgnoreCase("pos.eq.ra;meta.main")) { fpBean.setRa(param.getValue()); } // position DE du FoV else if (param.getUcd().equalsIgnoreCase("pos.eq.dec;meta.main")) { fpBean.setDe(param.getValue()); } // position RA du centre de rotation du FoV (PF jan 09) if (param.getUcd().equalsIgnoreCase("pos.eq.ra")) { fpBean.setRaRot(param.getValue()); } // position DE du centre de rotation du FoV (PF jan 09) else if (param.getUcd().equalsIgnoreCase("pos.eq.dec")) { fpBean.setDeRot(param.getValue()); } // angle position du FoV else if (param.getUcd().equalsIgnoreCase("pos.posAng") || param.getUtype().equals(SIAPExtBuilder.FOV_POS_ANGLE)) { double d; try { d = Double.valueOf(param.getValue()).doubleValue(); } catch (NumberFormatException e) { continue; // d = 0.; } fpBean.setPosAngle(d); } // caractère "movable" du FoV else if (param.getName().equalsIgnoreCase("Movable")) { boolean b; try { b = Boolean.valueOf(param.getValue()).booleanValue(); } catch (NumberFormatException e) { continue; } fpBean.setMovable(b); } // caractère "rollable" du FoV else if (param.getName().equalsIgnoreCase("Rollable")) { boolean b; try { b = Boolean.valueOf(param.getValue()).booleanValue(); } catch (NumberFormatException e) { continue; } fpBean.setRollable(b); } // convention interne à Aladin pour affichage dans JTable else if (param.getId().equals("InstrumentDescription")) { fpBean.setInstrumentDesc(param.getValue()); } // convention interne à Aladin pour affichage dans JTable else if (param.getId().equals("InstrumentName")) { fpBean.setInstrumentName(param.getValue()); } // convention interne à Aladin pour affichage dans JTable else if (param.getId().equals("TelescopeName")) { fpBean.setTelescopeName(param.getValue()); } // convention interne à Aladin pour affichage dans JTable else if (param.getId().equals("Origin")) { fpBean.setOrigin(param.getValue()); } } // traitement de la RESOURCE racine sub = processResource(res); if (sub != null && sub.getNbOfSubParts() > 0) fpBean.addSubFootprintBean(sub); /* for( int i=0; i<nbTab; i++ ) { processTable((SavotTable)tables.getItemAt(i), i); } */ // traitement des RESOURCEs dans RESOURCE (Tom Donaldson) ResourceSet resources = res.getResources(); for (int i = 0; i < resources.getItemCount(); i++) { sub = processResource((SavotResource) resources.getItemAt(i)); if (sub != null) { fpBean.addSubFootprintBean(sub); // on garde en mémoire les sous-parties d'un FoV --> on les place pour cela dans un // container String subfpId = ((SavotResource) resources.getItemAt(i)).getId(); if (subfpId != null && subfpId.length() > 0) { FootprintBean container = new FootprintBean(); container.addSubFootprintBean(sub); container.setDisplayInFovList(false); // on évite d'écraser un bean existant par un sub-bean if (!hash.contains(subfpId)) { hash.put(subfpId, container); } } } } hash.put(id, fpBean); // on ne vérifie plus l'existence d'un bean avec le meme nom, on écrase if (footprintHash.get(id) != null) { Aladin.trace( 1, "Footprint with ID " + id + "already exists ...\n Existing definition will be erased"); } Aladin.trace(3, "Footprint : add to footprintHash footprint with key " + id + "**"); footprintHash.put(id, fpBean); }