Search in sources :

Example 6 with Material

use of net.drewke.tdme.engine.model.Material in project tdme by andreasdr.

the class Object3DGroup method dispose.

/**
	 * Dispose
	 */
protected void dispose() {
    // dispose text
    Engine engine = Engine.getInstance();
    TextureManager textureManager = engine.getTextureManager();
    // dispose textures
    FacesEntity[] facesEntities = group.getFacesEntities();
    for (int j = 0; j < facesEntities.length; j++) {
        // get entity's material
        Material material = facesEntities[j].getMaterial();
        //	skip if no material was set up
        if (material == null)
            continue;
        // diffuse texture
        int glDiffuseTextureId = materialDiffuseTextureIdsByEntities[j];
        if (glDiffuseTextureId != Object3DGroup.GLTEXTUREID_NONE && glDiffuseTextureId != Object3DGroup.GLTEXTUREID_NOTUSED) {
            // remove texture from texture manager
            if (material.getDiffuseTexture() != null)
                textureManager.removeTexture(material.getDiffuseTexture().getId());
            // mark as removed
            materialDiffuseTextureIdsByEntities[j] = Object3DGroup.GLTEXTUREID_NONE;
        }
        // specular texture
        int glSpecularTextureId = materialSpecularTextureIdsByEntities[j];
        if (glSpecularTextureId != Object3DGroup.GLTEXTUREID_NONE && glSpecularTextureId != Object3DGroup.GLTEXTUREID_NOTUSED) {
            // remove texture from texture manager
            if (material.getDiffuseTexture() != null)
                textureManager.removeTexture(material.getSpecularTexture().getId());
            // mark as removed
            materialSpecularTextureIdsByEntities[j] = Object3DGroup.GLTEXTUREID_NONE;
        }
        // displacement texture
        int glDisplacementTextureId = materialDisplacementTextureIdsByEntities[j];
        if (glDisplacementTextureId != Object3DGroup.GLTEXTUREID_NONE && glDisplacementTextureId != Object3DGroup.GLTEXTUREID_NOTUSED) {
            // remove texture from texture manager
            if (material.getDisplacementTexture() != null)
                textureManager.removeTexture(material.getDisplacementTexture().getId());
            // mark as removed
            materialDisplacementTextureIdsByEntities[j] = Object3DGroup.GLTEXTUREID_NONE;
        }
        // normal texture
        int glNormalTextureId = materialNormalTextureIdsByEntities[j];
        if (glNormalTextureId != Object3DGroup.GLTEXTUREID_NONE && glNormalTextureId != Object3DGroup.GLTEXTUREID_NOTUSED) {
            // remove texture from texture manager
            if (material.getNormalTexture() != null)
                textureManager.removeTexture(material.getNormalTexture().getId());
            // mark as removed
            materialNormalTextureIdsByEntities[j] = Object3DGroup.GLTEXTUREID_NONE;
        }
    }
}
Also used : FacesEntity(net.drewke.tdme.engine.model.FacesEntity) TextureManager(net.drewke.tdme.engine.subsystems.manager.TextureManager) Material(net.drewke.tdme.engine.model.Material) Engine(net.drewke.tdme.engine.Engine) Joint(net.drewke.tdme.engine.model.Joint)

Example 7 with Material

use of net.drewke.tdme.engine.model.Material in project tdme by andreasdr.

the class Tools method createGroundModel.

/**
	 * Creates a ground plate
	 * @param width
	 * @param depth
	 * @param float y
	 * @return ground model
	 */
public static Model createGroundModel(float width, float depth, float y) {
    // ground model
    Model ground = new Model("ground", "ground", UpVector.Y_UP, RotationOrder.XYZ, null);
    //	material
    Material groundMaterial = new Material("ground");
    groundMaterial.getSpecularColor().set(0f, 0f, 0f, 1f);
    ground.getMaterials().put("ground", groundMaterial);
    //	group
    Group groundGroup = new Group(ground, null, "ground", "ground");
    //	faces entity
    //		ground
    FacesEntity groupFacesEntityGround = new FacesEntity(groundGroup, "ground group faces entity ground");
    groupFacesEntityGround.setMaterial(groundMaterial);
    //	faces entity 
    ArrayList<FacesEntity> groupFacesEntities = new ArrayList<FacesEntity>();
    groupFacesEntities.add(groupFacesEntityGround);
    //	vertices
    ArrayList<Vector3> groundVertices = new ArrayList<Vector3>();
    // left, near, ground
    groundVertices.add(new Vector3(-width, y, -depth));
    // left, far, ground
    groundVertices.add(new Vector3(-width, y, +depth));
    // right far, ground
    groundVertices.add(new Vector3(+width, y, +depth));
    // right, near, ground
    groundVertices.add(new Vector3(+width, y, -depth));
    //	normals
    ArrayList<Vector3> groundNormals = new ArrayList<Vector3>();
    //		ground
    groundNormals.add(new Vector3(0f, 1f, 0f));
    // texture coordinates
    ArrayList<TextureCoordinate> groundTextureCoordinates = new ArrayList<TextureCoordinate>();
    groundTextureCoordinates.add(new TextureCoordinate(0f, 0f));
    groundTextureCoordinates.add(new TextureCoordinate(0f, 1f));
    groundTextureCoordinates.add(new TextureCoordinate(1f, 1f));
    groundTextureCoordinates.add(new TextureCoordinate(1f, 0f));
    //	faces ground
    ArrayList<Face> groundFacesGround = new ArrayList<Face>();
    groundFacesGround.add(new Face(groundGroup, 0, 1, 2, 0, 0, 0, 0, 1, 2));
    groundFacesGround.add(new Face(groundGroup, 2, 3, 0, 0, 0, 0, 2, 3, 0));
    // set up faces entity
    groupFacesEntityGround.setFaces(groundFacesGround);
    // setup ground group
    groundGroup.setVertices(groundVertices);
    groundGroup.setNormals(groundNormals);
    groundGroup.setTextureCoordinates(groundTextureCoordinates);
    groundGroup.setFacesEntities(groupFacesEntities);
    // register group
    ground.getGroups().put("ground", groundGroup);
    ground.getSubGroups().put("ground", groundGroup);
    // prepare for indexed rendering
    ModelHelper.prepareForIndexedRendering(ground);
    //
    return ground;
}
Also used : FacesEntity(net.drewke.tdme.engine.model.FacesEntity) Group(net.drewke.tdme.engine.model.Group) Model(net.drewke.tdme.engine.model.Model) ArrayList(java.util.ArrayList) Material(net.drewke.tdme.engine.model.Material) Vector3(net.drewke.tdme.math.Vector3) TextureCoordinate(net.drewke.tdme.engine.model.TextureCoordinate) Face(net.drewke.tdme.engine.model.Face)

Example 8 with Material

use of net.drewke.tdme.engine.model.Material in project tdme by andreasdr.

the class DAEReader method readGeometry.

/**
	 * Reads a geometry
	 * @param authoring tools
	 * @param path name
	 * @param model
	 * @param group
	 * @param xml root
	 * @param xml node id
	 * @param material symbols
	 * @throws Exception
	 */
public static void readGeometry(AuthoringTool authoringTool, String pathName, Model model, Group group, Element xmlRoot, String xmlNodeId, HashMap<String, String> materialSymbols) throws Exception {
    StringTokenizer t;
    //
    FacesEntity facesEntity = null;
    ArrayList<FacesEntity> facesEntities = new ArrayList<FacesEntity>(Arrays.asList(group.getFacesEntities()));
    int verticesOffset = group.getVertices().length;
    ArrayList<Vector3> vertices = new ArrayList<Vector3>(Arrays.asList(group.getVertices()));
    int normalsOffset = group.getNormals().length;
    ArrayList<Vector3> normals = new ArrayList<Vector3>(Arrays.asList(group.getNormals()));
    int textureCoordinatesOffset = group.getTextureCoordinates() != null ? group.getTextureCoordinates().length : 0;
    ArrayList<TextureCoordinate> textureCoordinates = group.getTextureCoordinates() != null ? new ArrayList<TextureCoordinate>(Arrays.asList(group.getTextureCoordinates())) : new ArrayList<TextureCoordinate>();
    Element xmlLibraryGeometries = getChildrenByTagName(xmlRoot, "library_geometries").get(0);
    for (Element xmlGeometry : getChildrenByTagName(xmlLibraryGeometries, "geometry")) {
        if (xmlGeometry.getAttribute("id").equals(xmlNodeId)) {
            Element xmlMesh = getChildrenByTagName(xmlGeometry, "mesh").get(0);
            ArrayList<Element> xmlPolygonsList = new ArrayList<Element>();
            // try to read from triangles
            for (Element xmlTriangesElement : getChildrenByTagName(xmlMesh, "triangles")) {
                xmlPolygonsList.add(xmlTriangesElement);
            }
            // try to read from polylist
            for (Element xmlPolyListElement : getChildrenByTagName(xmlMesh, "polylist")) {
                xmlPolygonsList.add(xmlPolyListElement);
            }
            // try to read from polygons
            for (Element xmlPolygonsElement : getChildrenByTagName(xmlMesh, "polygons")) {
                xmlPolygonsList.add(xmlPolygonsElement);
            }
            // parse from xml polygons elements
            for (Element xmlPolygons : xmlPolygonsList) {
                ArrayList<Face> faces = new ArrayList<Face>();
                facesEntity = new FacesEntity(group, xmlNodeId);
                if (xmlPolygons.getNodeName().toLowerCase().equals("polylist")) {
                    t = new StringTokenizer(getChildrenByTagName(xmlPolygons, "vcount").get(0).getTextContent());
                    while (t.hasMoreTokens()) {
                        int vertexCount = Integer.parseInt(t.nextToken());
                        if (vertexCount != 3) {
                            throw new ModelFileIOException("we only support triangles in " + xmlNodeId);
                        }
                    }
                }
                // parse triangles
                int xmlInputs = -1;
                int xmlVerticesOffset = -1;
                String xmlVerticesSource = null;
                int xmlNormalsOffset = -1;
                String xmlNormalsSource = null;
                int xmlTexCoordOffset = -1;
                String xmlTexCoordSource = null;
                int xmlColorOffset = -1;
                String xmlColorSource = null;
                // material
                String xmlMaterialId = xmlPolygons.getAttribute("material");
                String materialSymbol = materialSymbols.get(xmlMaterialId);
                if (materialSymbol != null)
                    xmlMaterialId = materialSymbol.substring(1);
                if (xmlMaterialId != null && xmlMaterialId.length() > 0) {
                    Material material = model.getMaterials().get(xmlMaterialId);
                    if (material == null) {
                        // parse material as we do not have it yet
                        material = readMaterial(authoringTool, pathName, model, xmlRoot, xmlMaterialId);
                    }
                    // set it up
                    facesEntity.setMaterial(material);
                }
                // parse input sources
                HashSet<Integer> xmlInputSet = new HashSet<Integer>();
                for (Element xmlTrianglesInput : getChildrenByTagName(xmlPolygons, "input")) {
                    // check for vertices sources
                    if (xmlTrianglesInput.getAttribute("semantic").equals("VERTEX")) {
                        xmlVerticesOffset = Integer.parseInt(xmlTrianglesInput.getAttribute("offset"));
                        xmlVerticesSource = xmlTrianglesInput.getAttribute("source").substring(1);
                        xmlInputSet.add(xmlVerticesOffset);
                    } else // check for normals sources
                    if (xmlTrianglesInput.getAttribute("semantic").equals("NORMAL")) {
                        xmlNormalsOffset = Integer.parseInt(xmlTrianglesInput.getAttribute("offset"));
                        xmlNormalsSource = xmlTrianglesInput.getAttribute("source").substring(1);
                        xmlInputSet.add(xmlNormalsOffset);
                    }
                    // check for texture coordinate sources
                    if (xmlTrianglesInput.getAttribute("semantic").equals("TEXCOORD")) {
                        xmlTexCoordOffset = Integer.parseInt(xmlTrianglesInput.getAttribute("offset"));
                        xmlTexCoordSource = xmlTrianglesInput.getAttribute("source").substring(1);
                        xmlInputSet.add(xmlTexCoordOffset);
                    }
                    // check for color coordinate sources
                    if (xmlTrianglesInput.getAttribute("semantic").equals("COLOR")) {
                        xmlColorOffset = Integer.parseInt(xmlTrianglesInput.getAttribute("offset"));
                        xmlColorSource = xmlTrianglesInput.getAttribute("source").substring(1);
                        xmlInputSet.add(xmlColorOffset);
                    }
                }
                xmlInputs = xmlInputSet.size();
                // get vertices source
                for (Element xmlVertices : getChildrenByTagName(xmlMesh, "vertices")) {
                    if (xmlVertices.getAttribute("id").equals(xmlVerticesSource)) {
                        for (Element xmlVerticesInput : getChildrenByTagName(xmlVertices, "input")) {
                            if (xmlVerticesInput.getAttribute("semantic").equalsIgnoreCase("position")) {
                                xmlVerticesSource = xmlVerticesInput.getAttribute("source").substring(1);
                            } else if (xmlVerticesInput.getAttribute("semantic").equalsIgnoreCase("normal")) {
                                xmlNormalsSource = xmlVerticesInput.getAttribute("source").substring(1);
                            }
                        }
                    }
                }
                // check for triangles vertices sources
                if (xmlVerticesSource == null) {
                    throw new ModelFileIOException("Could not determine triangles vertices source for '" + xmlNodeId + "'");
                }
                // check for triangles normals sources
                if (xmlNormalsSource == null) {
                    throw new ModelFileIOException("Could not determine triangles normal source for '" + xmlNodeId + "'");
                }
                // load vertices, normals, texture coordinates
                for (Element xmlMeshSource : getChildrenByTagName(xmlMesh, "source")) {
                    // vertices
                    if (xmlMeshSource.getAttribute("id").equals(xmlVerticesSource)) {
                        Element xmlFloatArray = getChildrenByTagName(xmlMeshSource, "float_array").get(0);
                        String valueString = xmlFloatArray.getTextContent();
                        t = new StringTokenizer(valueString, " \n\r");
                        while (t.hasMoreTokens()) {
                            Vector3 v = new Vector3(Float.parseFloat(t.nextToken()), Float.parseFloat(t.nextToken()), Float.parseFloat(t.nextToken()));
                            vertices.add(v);
                        }
                    } else // normals
                    if (xmlMeshSource.getAttribute("id").equals(xmlNormalsSource)) {
                        Element xmlFloatArray = getChildrenByTagName(xmlMeshSource, "float_array").get(0);
                        String valueString = xmlFloatArray.getTextContent();
                        t = new StringTokenizer(valueString, " \n\r");
                        while (t.hasMoreTokens()) {
                            Vector3 v = new Vector3(Float.parseFloat(t.nextToken()), Float.parseFloat(t.nextToken()), Float.parseFloat(t.nextToken()));
                            normals.add(v);
                        }
                    }
                    // texture coordinates
                    if (xmlTexCoordSource != null) {
                        if (xmlMeshSource.getAttribute("id").equals(xmlTexCoordSource)) {
                            Element xmlFloatArray = getChildrenByTagName(xmlMeshSource, "float_array").get(0);
                            String valueString = xmlFloatArray.getTextContent();
                            t = new StringTokenizer(valueString, " \n\r");
                            while (t.hasMoreTokens()) {
                                TextureCoordinate tc = new TextureCoordinate(Float.parseFloat(t.nextToken()), Float.parseFloat(t.nextToken()));
                                textureCoordinates.add(tc);
                            }
                        }
                    }
                }
                // load faces
                for (Element xmlPolygon : getChildrenByTagName(xmlPolygons, "p")) {
                    String valueString = xmlPolygon.getTextContent();
                    t = new StringTokenizer(valueString, " \n\r");
                    int[] vi = new int[3];
                    int viIdx = 0;
                    int[] ni = new int[3];
                    int niIdx = 0;
                    int[] ti = xmlTexCoordSource == null ? null : new int[3];
                    int tiIdx = 0;
                    int valueIdx = 0;
                    boolean valid = true;
                    while (t.hasMoreTokens()) {
                        int value = Integer.parseInt(t.nextToken());
                        if (valueIdx % xmlInputs == xmlVerticesOffset) {
                            vi[viIdx++] = value;
                            // validate
                            if (value < 0 || value >= vertices.size() - verticesOffset) {
                                valid = false;
                            }
                            // fix for some strange models
                            if (xmlNormalsSource != null && xmlNormalsOffset == -1) {
                                ni[niIdx++] = value;
                                // validate
                                if (value < 0 || value >= normals.size() - normalsOffset) {
                                    valid = false;
                                }
                            }
                        }
                        if (xmlNormalsOffset != -1 && valueIdx % xmlInputs == xmlNormalsOffset) {
                            ni[niIdx++] = value;
                            // validate
                            if (value < 0 || value >= normals.size() - normalsOffset) {
                                valid = false;
                            }
                        }
                        if (xmlTexCoordOffset != -1 && valueIdx % xmlInputs == xmlTexCoordOffset) {
                            ti[tiIdx++] = value;
                            // validate
                            if (value < 0 || value >= textureCoordinates.size() - textureCoordinatesOffset) {
                                valid = false;
                            }
                        }
                        if (viIdx == 3 && niIdx == 3 && (ti == null || tiIdx == 3)) {
                            // only add valid faces
                            if (valid) {
                                // add face
                                Face f = new Face(group, vi[0] + verticesOffset, vi[1] + verticesOffset, vi[2] + verticesOffset, ni[0] + normalsOffset, ni[1] + normalsOffset, ni[2] + normalsOffset);
                                if (ti != null) {
                                    f.setTextureCoordinateIndices(ti[0] + textureCoordinatesOffset, ti[1] + textureCoordinatesOffset, ti[2] + textureCoordinatesOffset);
                                }
                                faces.add(f);
                            }
                            viIdx = 0;
                            niIdx = 0;
                            tiIdx = 0;
                            valid = true;
                        }
                        valueIdx++;
                    }
                }
                // add faces entities if we have any
                if (faces.isEmpty() == false) {
                    facesEntity.setFaces(faces);
                    facesEntities.add(facesEntity);
                }
            }
        }
    }
    // set up group
    group.setVertices(vertices);
    group.setNormals(normals);
    if (textureCoordinates.size() > 0)
        group.setTextureCoordinates(textureCoordinates);
    group.setFacesEntities(facesEntities);
    // create normal tangents and bitangents
    ModelHelper.createNormalTangentsAndBitangents(group);
    // determine features
    group.determineFeatures();
}
Also used : FacesEntity(net.drewke.tdme.engine.model.FacesEntity) Element(org.w3c.dom.Element) ArrayList(java.util.ArrayList) Vector3(net.drewke.tdme.math.Vector3) Material(net.drewke.tdme.engine.model.Material) Joint(net.drewke.tdme.engine.model.Joint) StringTokenizer(java.util.StringTokenizer) TextureCoordinate(net.drewke.tdme.engine.model.TextureCoordinate) Face(net.drewke.tdme.engine.model.Face) HashSet(java.util.HashSet)

Example 9 with Material

use of net.drewke.tdme.engine.model.Material in project tdme by andreasdr.

the class WFObjReader method readMaterials.

/**
	 * Reads a wavefront object material library
	 * @param path name
	 * @param file name
	 * @return
	 */
private static HashMap<String, Material> readMaterials(String pathName, String fileName) throws IOException {
    HashMap<String, Material> materials = new HashMap<String, Material>();
    Material current = null;
    //
    DataInputStream inputStream = new DataInputStream(FileSystem.getInstance().getInputStream(pathName, fileName));
    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
    String line;
    float alpha = 1.0f;
    while ((line = reader.readLine()) != null) {
        line = line.trim();
        // skip on comments
        if (line.startsWith("#")) {
            continue;
        }
        // determine index of first ' ' which will separate command from arguments
        int commandEndIdx = line.indexOf(' ');
        if (commandEndIdx == -1)
            commandEndIdx = line.length();
        // determine command
        String command = line.substring(0, commandEndIdx).trim().toLowerCase();
        // determine arguments if any exist
        String arguments = command.length() + 1 > line.length() ? "" : line.substring(command.length() + 1);
        // parse
        if (command.equals("newmtl")) {
            String name = arguments;
            current = new Material(name);
            materials.put(name, current);
        } else if (command.equals("map_ka")) {
            current.setDiffuseTexture(pathName, arguments);
        } else if (command.equals("map_kd")) {
            current.setDiffuseTexture(pathName, arguments);
        } else if (command.equals("ka")) {
            StringTokenizer t = new StringTokenizer(arguments, " ");
            current.getAmbientColor().set(Float.parseFloat(t.nextToken()), Float.parseFloat(t.nextToken()), Float.parseFloat(t.nextToken()), alpha);
        } else if (command.equals("kd")) {
            StringTokenizer t = new StringTokenizer(arguments, " ");
            current.getDiffuseColor().set(Float.parseFloat(t.nextToken()), Float.parseFloat(t.nextToken()), Float.parseFloat(t.nextToken()), alpha);
        } else if (command.equals("ks")) {
            StringTokenizer t = new StringTokenizer(arguments, " ");
            current.getSpecularColor().set(Float.parseFloat(t.nextToken()), Float.parseFloat(t.nextToken()), Float.parseFloat(t.nextToken()), alpha);
        } else if (command.equals("tr")) {
            alpha = Float.parseFloat(arguments);
            current.getAmbientColor().setAlpha(alpha);
            current.getDiffuseColor().setAlpha(alpha);
            current.getSpecularColor().setAlpha(alpha);
            current.getEmissionColor().setAlpha(alpha);
        } else if (command.equals("d")) {
            alpha = Float.parseFloat(arguments);
            current.getAmbientColor().setAlpha(alpha);
            current.getDiffuseColor().setAlpha(alpha);
            current.getSpecularColor().setAlpha(alpha);
            current.getEmissionColor().setAlpha(alpha);
        }
    }
    // Close the input stream
    inputStream.close();
    //
    return materials;
}
Also used : StringTokenizer(java.util.StringTokenizer) InputStreamReader(java.io.InputStreamReader) HashMap(net.drewke.tdme.utils.HashMap) BufferedReader(java.io.BufferedReader) Material(net.drewke.tdme.engine.model.Material) DataInputStream(java.io.DataInputStream)

Example 10 with Material

use of net.drewke.tdme.engine.model.Material in project tdme by andreasdr.

the class TMReader method readMaterial.

/**
	 * Read material
	 * @param input stream
	 * @throws IOException
	 * @throws ModelFileIOException
	 * @return material
	 */
private static Material readMaterial(InputStream is) throws IOException, ModelFileIOException {
    String id = readString(is);
    Material m = new Material(id);
    m.getAmbientColor().set(readFloatArray(is));
    m.getDiffuseColor().set(readFloatArray(is));
    m.getSpecularColor().set(readFloatArray(is));
    m.getEmissionColor().set(readFloatArray(is));
    m.setShininess(readFloat(is));
    String diffuseTexturePathName = readString(is);
    String diffuseTextureFileName = readString(is);
    if (diffuseTextureFileName != null && diffuseTexturePathName != null) {
        m.setDiffuseTexture(diffuseTexturePathName, diffuseTextureFileName);
    }
    String specularTexturePathName = readString(is);
    String specularTextureFileName = readString(is);
    if (specularTextureFileName != null && specularTexturePathName != null) {
        m.setSpecularTexture(specularTexturePathName, specularTextureFileName);
    }
    String normalTexturePathName = readString(is);
    String normalTextureFileName = readString(is);
    if (normalTextureFileName != null && normalTexturePathName != null) {
        m.setNormalTexture(normalTexturePathName, normalTextureFileName);
    }
    String displacementTexturePathName = readString(is);
    String displacementTextureFileName = readString(is);
    if (displacementTextureFileName != null && displacementTexturePathName != null) {
        m.setDisplacementTexture(displacementTexturePathName, displacementTextureFileName);
    }
    return m;
}
Also used : Material(net.drewke.tdme.engine.model.Material)

Aggregations

Material (net.drewke.tdme.engine.model.Material)21 FacesEntity (net.drewke.tdme.engine.model.FacesEntity)15 Model (net.drewke.tdme.engine.model.Model)10 Vector3 (net.drewke.tdme.math.Vector3)10 ArrayList (java.util.ArrayList)9 Face (net.drewke.tdme.engine.model.Face)9 Group (net.drewke.tdme.engine.model.Group)8 TextureCoordinate (net.drewke.tdme.engine.model.TextureCoordinate)5 StringTokenizer (java.util.StringTokenizer)4 Joint (net.drewke.tdme.engine.model.Joint)4 HashMap (net.drewke.tdme.utils.HashMap)3 BufferedReader (java.io.BufferedReader)2 DataInputStream (java.io.DataInputStream)2 IOException (java.io.IOException)2 InputStreamReader (java.io.InputStreamReader)2 Object3D (net.drewke.tdme.engine.Object3D)2 Element (org.w3c.dom.Element)2 InputStream (java.io.InputStream)1 OutputStream (java.io.OutputStream)1 HashSet (java.util.HashSet)1