📄 plainremoteresource.java
字号:
ex.printStackTrace(); throw new RemoteAccessException("http "+ex.getMessage()); } } /** * @exception RemoteAccessException If somenetwork failure occured. */ public RemoteResource loadResource(String identifier) throws RemoteAccessException { try { // Prepare the request: Request req = createRequest(); req.setMethod("LOAD-RESOURCE"); req.setURL(new URL(url.toString()+ URLEncoder.encode(identifier))); // Run it: Reply rep = admin.runRequest(req); // Decode the reply: InputStream in = getInputStream(rep); RemoteResource ret = admin.reader.readResource(url,identifier,in); in.close(); return ret; } catch (RemoteAccessException rae) { throw rae; } catch (Exception ex) { ex.printStackTrace(); throw new RemoteAccessException(ex.getMessage()); } } /** * Register a new resource within this container. * @param id The identifier of the resource to be created. * @param classname The name of the class of the resource to be added. * @exception RemoteAccessException If somenetwork failure occured. */ public RemoteResource registerResource(String id, String classname) throws RemoteAccessException { ResourceDescription rd = new EmptyDescription(classname, id); try { Request req = createRequest(); // Prepare the request: req.setMethod("REGISTER-RESOURCE"); req.setContentType(admin.conftype); req.setURL(url); ByteArrayOutputStream bout = new ByteArrayOutputStream(); OutputStream out; if (debug) { out = bout; } else { out = new GZIPOutputStream(bout); } admin.writer.writeResourceDescription(rd, out); byte bits[] = bout.toByteArray(); req.setContentLength(bits.length); if (!debug) { req.addTransferEncoding("gzip"); } req.setOutputStream(new ByteArrayInputStream(bits)); // Run it: Reply rep = admin.runRequest(req); // Decode the result: rd = admin.reader.readResourceDescription(getInputStream(rep)); RemoteResource ret = new PlainRemoteResource(admin, url, rd.getIdentifier(), rd); return ret; } catch (RemoteAccessException rae) { throw rae; } catch (Exception ex) { ex.printStackTrace(); throw new RemoteAccessException(ex.getMessage()); } } /** * Is this resource a framed resource ? * @return A boolean, <strong>true</strong> if the resource is framed * and it currently has some frames attached, <strong>false</strong> * otherwise. * @exception RemoteAccessException If somenetwork failure occured. */ public boolean isFramed() throws RemoteAccessException { return isframed; } /** * Get the frames attached to that resource. * Each frame is itself a resource, so it is returned as an instance of * a remote resource. * @return A (posssibly <strong>null</strong>) array of frames attached * to that resource. * @exception RemoteAccessException If somenetwork failure occured. */ public RemoteResource[] getFrames() throws RemoteAccessException { if ( ! isframed ) throw new RuntimeException("not a framed resource"); return frames; } /** * Unregister a given frame from that resource. * @param frame The frame to unregister. * @exception RemoteAccessException If somenetwork failure occured. */ public void unregisterFrame(RemoteResource frame) throws RemoteAccessException { if ( ! isframed ) throw new RuntimeException("not a framed resource"); if ( frames == null ) throw new RuntimeException("this resource has no frames"); // Remove it: String id = null; try { id = ((PlainRemoteResource)frame).identifier; Request req = createRequest(); // Prepare the request: req.setMethod("UNREGISTER-FRAME"); req.setContentType(admin.conftype); req.setURL(url); ResourceDescription dframe = new EmptyDescription("", id); ByteArrayOutputStream bout = new ByteArrayOutputStream(); OutputStream out; if (debug) { out = bout; } else { out = new GZIPOutputStream(bout); } admin.writer.writeResourceDescription(dframe, out); byte bits[] = bout.toByteArray(); req.setContentLength(bits.length); if (!debug) { req.addTransferEncoding("gzip"); } req.setOutputStream(new ByteArrayInputStream(bits)); // Run it: Reply rep = admin.runRequest(req); } catch (RemoteAccessException rae) { throw rae; } catch (Exception ex) { ex.printStackTrace(); throw new RemoteAccessException(ex.getMessage()); } RemoteResource f[] = new RemoteResource[frames.length-1]; int j = 0; for (int i = 0; i < frames.length ; i++) { if ( ((PlainRemoteResource)frames[i]).identifier.equals(id)) { // got it, copy the end of the array System.arraycopy(frames, i+1, f, j, frames.length-i-1); frames = f; return; } else { try { f[j++] = frames[i]; } catch (ArrayIndexOutOfBoundsException ex) { return; // no modifications, return } } } } public boolean isFrame() { return isFrameURL(url); } protected boolean isFrameURL(URL furl) { return (furl.toString().lastIndexOf('?') != -1); } /** * Attach a new frame to that resource. * @param identifier The name for this frame (if any). * @param clsname The name of the frame's class. * @return A remote handle to the (remotely) created frame instance. * @exception RemoteAccessException If somenetwork failure occured. */ public RemoteResource registerFrame(String id, String classname) throws RemoteAccessException { // Can we add new resources ? if ( ! isframed ) throw new RuntimeException("not a framed resource"); try { Request req = createRequest(); // Prepare the request: req.setMethod("REGISTER-FRAME"); req.setContentType(admin.conftype); ResourceDescription dframe = new EmptyDescription(classname, id); ByteArrayOutputStream bout = new ByteArrayOutputStream(); OutputStream out; if (debug) { out = bout; } else { out = new GZIPOutputStream(bout); } admin.writer.writeResourceDescription(dframe, out); byte bits[] = bout.toByteArray(); req.setContentLength(bits.length); if (!debug) { req.addTransferEncoding("gzip"); } req.setOutputStream(new ByteArrayInputStream(bits)); // Run it: Reply rep = admin.runRequest(req); dframe = admin.reader.readResourceDescription(getInputStream(rep)); id = dframe.getIdentifier(); URL url = null; if (isFrame()) { url = new URL(this.url, this.url.getFile()+"?" + id); } else { url = new URL(parent.toString() + identifier+"?"+id); } PlainRemoteResource frame = new PlainRemoteResource(admin, parent, url, id, dframe); //insert it in the frame array if ( frames != null ) { RemoteResource nf[] = new RemoteResource[frames.length+1]; System.arraycopy(frames, 0, nf, 0, frames.length); nf[frames.length] = frame; frames = nf; } else { frames = new RemoteResource[1]; frames[0] = frame; } return frame; } catch (RemoteAccessException rae) { throw rae; } catch (Exception ex) { ex.printStackTrace(); throw new RemoteAccessException(ex.getMessage()); } } protected void createRemoteFrames() { ResourceDescription dframes[] = description.getFrameDescriptions(); int len = dframes.length; this.frames = new RemoteResource[len]; for (int i = 0 ; i < len ; i++) { ResourceDescription dframe = dframes[i]; String frameid = dframe.getIdentifier(); URL url = null; try { if (isFrame()) { url = new URL(this.url, this.url.getFile()+"?" + frameid); } else { url = new URL(parent.toString() + identifier+"?"+frameid); } } catch (MalformedURLException ex) { ex.printStackTrace(); url = null; } PlainRemoteResource frame = new PlainRemoteResource(admin, parent, url, frameid, dframe); frames[i] = frame; } } /** * Dump that resource to the given output stream. * @param prt A print stream to dump to. * @exception RemoteAccessException If somenetwork failure occured. */ public void dump(PrintStream prt) throws RemoteAccessException { // Dump the class hierarchy: System.out.println("+ classes: "); String classes[] = getClassHierarchy(); for (int i = 0 ; i < classes.length ; i++) System.out.println("\t"+classes[i]); // Any frames available ? if ( isframed && (frames != null) ) { System.out.println("+ "+frames.length+" frames."); for (int i = 0 ; i < frames.length ; i++) { prt.println("\t"+((PlainRemoteResource)frames[i]).identifier); ((PlainRemoteResource) frames[i]).dump(prt); } } // Run the query, and display results: System.out.println("+ attributes: "); AttributeDescription attrs[] = getAttributes(); for (int i = 0 ; i < attrs.length ; i++) { Attribute att = attrs[i].getAttribute(); if (att.checkFlag(Attribute.EDITABLE)) { Object value = attrs[i].getValue(); if (value != null) { if (att instanceof SimpleAttribute) { SimpleAttribute sa = (SimpleAttribute) att; prt.println("\t"+att.getName()+"="+ sa.pickle(attrs[i].getValue())); } else if (att instanceof ArrayAttribute) { ArrayAttribute aa = (ArrayAttribute) att; String values[] = aa.pickle(attrs[i].getValue()); prt.print("\t"+att.getName()+"="); for (int j = 0 ; j < values.length ; j++) { if (j != 0) prt.print(" | "); prt.print(values[j]); } } } else prt.println("\t"+att.getName()+" <undef>"); } } } /** * reload the RemoteResource. */ protected void update() throws RemoteAccessException { try { Request req = createRequest(); // Prepare the request: req.setMethod("LOAD-RESOURCE"); // Run it: Reply rep = admin.runRequest(req); InputStream in = getInputStream(rep); this.description = admin.reader.readResourceDescription(in); createRemoteFrames(); } catch (RemoteAccessException rae) { throw rae; } catch (Exception ex) { throw new RemoteAccessException(ex.getMessage()); } } PlainRemoteResource(AdminContext admin, URL parent, String identifier, ResourceDescription description) { this(admin, parent, null, identifier, description); } PlainRemoteResource(AdminContext admin, URL parent, URL url, String identifier, ResourceDescription description) { this.admin = admin; this.parent = parent; this.identifier = identifier; this.description = description; String classes[] = description.getClassesAndInterfaces(); for (int i = 0 ; i < classes.length ; i++) { if (classes[i].equals( "org.w3c.tools.resources.ContainerInterface")) iscontainer = true; if (classes[i].equals("org.w3c.tools.resources.FramedResource")) isframed = true; if (classes[i].equals("org.w3c.tools.resources.DirectoryResource")) isDirectoryResource = true; if (classes[i].equals( "org.w3c.tools.resources.indexer.IndexersCatalog")) isindexerscatalog = true; } if (url == null) { if (parent != null) { String encoded = ((identifier == null) ? identifier : URLEncoder.encode(identifier)); String urlpart = iscontainer ? encoded+"/" : encoded; try { this.url = ((identifier != null) ? new URL(parent.toString() + urlpart) : parent); } catch (MalformedURLException ex) { ex.printStackTrace(); this.url = null; } } else { this.url = null; } } else { this.url = url; } createRemoteFrames(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -