/** * Perform the action of the plugin. * * @param document the current document. */ public boolean perform(Document document) throws IOException { // Interact with the user to get the layer tag/ Tag layerTag = getLayerTagFromUser(document); if (layerTag == null) return false; // User cancled. Tag endTag = new Tag(layerTag.getName(), false); // Get the output stream to hold the new document text. PrintWriter out = new PrintWriter(document.getOutput()); // Create a lexical stream to tokenize the old document text. LexicalStream in = new LexicalStream(new SelectedHTMLReader(document.getInput(), out)); for (; ; ) { // Get the next token of the document. Token token = in.next(); if (token == null) break; // Null means we've finished the document. else if (token instanceof Comment) { Comment comment = (Comment) token; if (comment.isSelectionStart()) { out.print(layerTag); } else if (comment.isSelectionEnd()) { out.print(comment); out.print(endTag); continue; // So comment isn't printed twice. } } out.print(token); } out.close(); return true; }
private static Binding _createBinding(@NotNull Accessor accessor) { Binding binding = XmlSerializerImpl.getTypeBinding(accessor.getGenericType(), accessor); if (binding instanceof JDOMElementBinding) { return binding; } Attribute attribute = accessor.getAnnotation(Attribute.class); if (attribute != null) { return new AttributeBinding(accessor, attribute); } Tag tag = accessor.getAnnotation(Tag.class); if (tag != null && !tag.value().isEmpty()) { return new TagBinding(accessor, tag); } Text text = accessor.getAnnotation(Text.class); if (text != null) { return new TextBinding(accessor); } boolean surroundWithTag = true; Property property = accessor.getAnnotation(Property.class); if (property != null) { surroundWithTag = property.surroundWithTag(); } if (!surroundWithTag) { if (!Element.class.isAssignableFrom(binding.getBoundNodeType())) { throw new XmlSerializationException( "Text-serializable properties can't be serialized without surrounding tags: " + accessor); } return new AccessorBindingWrapper(accessor, binding); } return new OptionTagBinding(accessor, accessor.getAnnotation(OptionTag.class)); }
private static String getTagNameFromAnnotation(Class<?> aClass) { Tag tag = aClass.getAnnotation(Tag.class); if (tag != null && !tag.value().isEmpty()) return tag.value(); return null; }