Examples of FolderImpl


Examples of org.apache.jetspeed.om.folder.impl.FolderImpl

    /* (non-Javadoc)
     * @see org.apache.jetspeed.page.PageManager#getFolders(org.apache.jetspeed.om.folder.Folder)
     */
    public NodeSet getFolders(Folder folder) throws DocumentException
    {
        FolderImpl folderImpl = (FolderImpl)folder;

        // perform lookup of folder folders collection and cache in folder
        try
        {
            // query for folders
            Criteria filter = new Criteria();
            filter.addEqualTo("parent", new Integer(folderImpl.getIdentity()));
            QueryByCriteria query = QueryFactory.newQuery(FolderImpl.class, filter);
            Collection folders = getPersistenceBrokerTemplate().getCollectionByQuery(query);

            // cache folders in folder
            folderImpl.accessFolders().clear();
            if (folders != null)
            {
                folderImpl.accessFolders().addAll(folders);
            }
            folderImpl.resetFolders(true);
        }
        catch (Exception e)
        {
            // reset cache in folder
            folderImpl.resetFolders(false);
            throw new DocumentException("Unable to access folders for folder " + folder.getPath() + ".");
        }

        // folder folders cache populated, get folders from folder
        // to provide packaging as filtered node set
View Full Code Here

Examples of org.apache.jetspeed.om.folder.impl.FolderImpl

    /* (non-Javadoc)
     * @see org.apache.jetspeed.page.PageManager#getPages(org.apache.jetspeed.om.folder.Folder)
     */
    public NodeSet getPages(Folder folder) throws NodeException
    {
        FolderImpl folderImpl = (FolderImpl)folder;

        // perform lookup of folder pages collection and cache in folder
        try
        {
            // query for pages
            Criteria filter = new Criteria();
            filter.addEqualTo("parent", new Integer(folderImpl.getIdentity()));
            QueryByCriteria query = QueryFactory.newQuery(PageImpl.class, filter);
            Collection pages = getPersistenceBrokerTemplate().getCollectionByQuery(query);

            // cache pages in folder
            folderImpl.accessPages().clear();
            if (pages != null)
            {
                folderImpl.accessPages().addAll(pages);
            }
            folderImpl.resetPages(true);
        }
        catch (Exception e)
        {
            // reset cache in folder
            folderImpl.resetPages(false);
            throw new NodeException("Unable to access pages for folder " + folder.getPath() + ".");
        }

        // folder pages cache populated, get pages from folder
        // to provide packaging as filtered node set
View Full Code Here

Examples of org.apache.jetspeed.om.folder.impl.FolderImpl

    /* (non-Javadoc)
     * @see org.apache.jetspeed.page.PageManager#getPageTemplates(org.apache.jetspeed.om.folder.Folder)
     */
    public NodeSet getPageTemplates(Folder folder) throws NodeException
    {
        FolderImpl folderImpl = (FolderImpl)folder;

        // perform lookup of folder page templates collection and cache in folder
        try
        {
            // query for page templates
            Criteria filter = new Criteria();
            filter.addEqualTo("parent", new Integer(folderImpl.getIdentity()));
            QueryByCriteria query = QueryFactory.newQuery(PageTemplateImpl.class, filter);
            Collection pageTemplates = getPersistenceBrokerTemplate().getCollectionByQuery(query);

            // cache page templates in folder
            folderImpl.accessPageTemplates().clear();
            if (pageTemplates != null)
            {
                folderImpl.accessPageTemplates().addAll(pageTemplates);
            }
            folderImpl.resetPageTemplates(true);
        }
        catch (Exception e)
        {
            // reset cache in folder
            folderImpl.resetPageTemplates(false);
            throw new NodeException("Unable to access page templates for folder " + folder.getPath() + ".");
        }

        // folder page templates cache populated, get page templates
        // from folder to provide packaging as filtered node set
View Full Code Here

Examples of org.apache.jetspeed.om.folder.impl.FolderImpl

    /* (non-Javadoc)
     * @see org.apache.jetspeed.page.PageManager#getDynamicPages(org.apache.jetspeed.om.folder.Folder)
     */
    public NodeSet getDynamicPages(Folder folder) throws NodeException
    {
        FolderImpl folderImpl = (FolderImpl)folder;

        // perform lookup of folder dynamic pages collection and cache in folder
        try
        {
            // query for dynamic pages
            Criteria filter = new Criteria();
            filter.addEqualTo("parent", new Integer(folderImpl.getIdentity()));
            QueryByCriteria query = QueryFactory.newQuery(DynamicPageImpl.class, filter);
            Collection dynamicPages = getPersistenceBrokerTemplate().getCollectionByQuery(query);

            // cache dynamic pages in folder
            folderImpl.accessDynamicPages().clear();
            if (dynamicPages != null)
            {
                folderImpl.accessDynamicPages().addAll(dynamicPages);
            }
            folderImpl.resetDynamicPages(true);
        }
        catch (Exception e)
        {
            // reset cache in folder
            folderImpl.resetDynamicPages(false);
            throw new NodeException("Unable to access dynamic pages for folder " + folder.getPath() + ".");
        }

        // folder dynamic pages cache populated, get dynamic pages
        // from folder to provide packaging as filtered node set
View Full Code Here

Examples of org.apache.jetspeed.om.folder.impl.FolderImpl

    /* (non-Javadoc)
     * @see org.apache.jetspeed.page.PageManager#getFragmentDefinitions(org.apache.jetspeed.om.folder.Folder)
     */
    public NodeSet getFragmentDefinitions(Folder folder) throws NodeException
    {
        FolderImpl folderImpl = (FolderImpl)folder;

        // perform lookup of folder fragment definition collection and cache in folder
        try
        {
            // query for fragment definition
            Criteria filter = new Criteria();
            filter.addEqualTo("parent", new Integer(folderImpl.getIdentity()));
            QueryByCriteria query = QueryFactory.newQuery(FragmentDefinitionImpl.class, filter);
            Collection fragmentDefinitions = getPersistenceBrokerTemplate().getCollectionByQuery(query);

            // cache fragment definition in folder
            folderImpl.accessFragmentDefinitions().clear();
            if (fragmentDefinitions != null)
            {
                folderImpl.accessFragmentDefinitions().addAll(fragmentDefinitions);
            }
            folderImpl.resetFragmentDefinitions(true);
        }
        catch (Exception e)
        {
            // reset cache in folder
            folderImpl.resetFragmentDefinitions(false);
            throw new NodeException("Unable to access fragment definition for folder " + folder.getPath() + ".");
        }

        // folder fragment definition cache populated, get fragment definition
        // from folder to provide packaging as filtered node set
View Full Code Here

Examples of org.apache.jetspeed.om.folder.impl.FolderImpl

    /* (non-Javadoc)
     * @see org.apache.jetspeed.page.PageManager#getLinks(org.apache.jetspeed.om.folder.Folder)
     */   
    public NodeSet getLinks(Folder folder) throws NodeException
    {
        FolderImpl folderImpl = (FolderImpl)folder;

        // perform lookup of folder links collection and cache in folder
        try
        {
            // query for links
            Criteria filter = new Criteria();
            filter.addEqualTo("parent", new Integer(folderImpl.getIdentity()));
            QueryByCriteria query = QueryFactory.newQuery(LinkImpl.class, filter);
            Collection links = getPersistenceBrokerTemplate().getCollectionByQuery(query);

            // cache links in folder
            folderImpl.accessLinks().clear();
            if (links != null)
            {
                folderImpl.accessLinks().addAll(links);
            }
            folderImpl.resetLinks(true);
        }
        catch (Exception e)
        {
            // reset cache in folder
            folderImpl.resetLinks(false);
            throw new NodeException("Unable to access links for folder " + folder.getPath() + ".");
        }

        // folder links cache populated, get links from folder
        // to provide packaging as filtered node set
View Full Code Here

Examples of org.apache.jetspeed.om.folder.impl.FolderImpl

    /* (non-Javadoc)
     * @see org.apache.jetspeed.page.PageManager#getPageSecurity(org.apache.jetspeed.om.folder.Folder)
     */   
    public PageSecurity getPageSecurity(Folder folder) throws DocumentNotFoundException, NodeException
    {
        FolderImpl folderImpl = (FolderImpl)folder;

        // perform lookup of page security document and cache
        // in folder; limit lookup to root folder since page
        // security document is currently supported only as a
        // root folder singleton
        if (folder.getPath().equals(Folder.PATH_SEPARATOR))
        {
            try
            {
                // query for page security
                Criteria filter = new Criteria();
                filter.addEqualTo("parent", new Integer(folderImpl.getIdentity()));
                QueryByCriteria query = QueryFactory.newQuery(PageSecurityImpl.class, filter);
                PageSecurity document = (PageSecurity)getPersistenceBrokerTemplate().getObjectByQuery(query);

                // cache page security in folder
                folderImpl.resetPageSecurity((PageSecurityImpl)document, true);
            }
            catch (Exception e)
            {
                // reset page security in folder
                folderImpl.resetPageSecurity(null, true);
                throw new NodeException("Unable to access page security for folder " + folder.getPath() + ".");
            }
        }
        else
        {
            // cache page security in folder
            folderImpl.resetPageSecurity(null, true);
        }

        // folder page security instance cache populated, get
        // instance from folder to provide security checks
        return folder.getPageSecurity();
View Full Code Here

Examples of org.apache.jetspeed.om.folder.impl.FolderImpl

    /* (non-Javadoc)
     * @see org.apache.jetspeed.page.PageManager#getAll(org.apache.jetspeed.om.folder.Folder)
     */
    public NodeSet getAll(Folder folder) throws DocumentException
    {
        FolderImpl folderImpl = (FolderImpl)folder;

        // perform lookup of folder nodes collection and cache in folder
        try
        {
            // query for all nodes
            List all = DatabasePageManagerUtils.createList();
           
            // query for subfolders
            Criteria filter = new Criteria();
            filter.addEqualTo("parent", new Integer(folderImpl.getIdentity()));
            QueryByCriteria query = QueryFactory.newQuery(FolderImpl.class, filter);
            Collection folders = getPersistenceBrokerTemplate().getCollectionByQuery(query);
            if (folders != null)
            {
                all.addAll(folders);
            }

            // polymorphic query for pages, page templates, dynamic pages,
            // and fragment definitions
            filter = new Criteria();
            filter.addEqualTo("parent", new Integer(folderImpl.getIdentity()));
            query = QueryFactory.newQuery(BaseFragmentsElementImpl.class, filter);
            Collection baseFragments = getPersistenceBrokerTemplate().getCollectionByQuery(query);
            if (baseFragments != null)
            {
                all.addAll(baseFragments);
            }

            // query for links
            filter = new Criteria();
            filter.addEqualTo("parent", new Integer(folderImpl.getIdentity()));
            query = QueryFactory.newQuery(LinkImpl.class, filter);
            Collection links = getPersistenceBrokerTemplate().getCollectionByQuery(query);
            if (links != null)
            {
                all.addAll(links);
            }

            // query for page security
            filter = new Criteria();
            filter.addEqualTo("parent", new Integer(folderImpl.getIdentity()));
            query = QueryFactory.newQuery(PageSecurityImpl.class, filter);
            PageSecurity document = (PageSecurity)getPersistenceBrokerTemplate().getObjectByQuery(query);
            if (document != null)
            {
                all.add(document);
            }

            // cache links in folder
            folderImpl.accessAll().clear();
            folderImpl.accessAll().addAll(all);
            folderImpl.resetAll(true);
        }
        catch (Exception e)
        {
            // reset cache in folder
            folderImpl.resetAll(false);
            throw new DocumentException("Unable to access all nodes for folder " + folder.getPath() + ".");
        }

        // folder all nodes cache populated, get all from folder
        // to provide packaging as filtered node set
View Full Code Here

Examples of org.apache.jetspeed.om.folder.impl.FolderImpl

                // add profiled folders to all profiled folders list
                allProfiledFolders = new ArrayList(24);
                Iterator foldersIter = profiledFolders.iterator();
                while (foldersIter.hasNext())
                {
                    FolderImpl profiledPageFolder = (FolderImpl) foldersIter.next();
                    if (!profiledPageFolder.isHidden())
                    {
                        allProfiledFolders.add(setProfiledNodePathAndUrl(profiledPageFolder));
                    }
                }

                // profile general document/folder order
                List documentOrder = null;
                foldersIter = searchProfiledFolders.iterator();
                while ((documentOrder == null) && foldersIter.hasNext())
                {
                    FolderImpl profiledPageFolder = (FolderImpl) setProfiledNodePathAndUrl((AbstractNode) foldersIter.next());
                    if ((profiledPageFolder.getMetaData() != null) && (profiledPageFolder.getMetaData().getDocumentOrder() != null) &&
                        ! profiledPageFolder.getMetaData().getDocumentOrder().isEmpty())
                    {
                        documentOrder = profiledPageFolder.getMetaData().getDocumentOrder();
                    }
                }
                Comparator documentComparator = new DocumentOrderComparator(documentOrder);

                // profile sibling pages by aggregating all siblings in profiled folders
                // using profiled general document order, (do not filter unordered siblings);
                // force profiled page to exist as sibling to support pages profiled using
                // alternate locators that may not select page in profiled folder: the
                // profiled page must appear in the sibling pages collection.
                siblingPages = new NodeSetImpl(null, documentComparator);
                siblingPages = addUniqueOrDescribedUrlNode((NodeSetImpl) siblingPages, (AbstractNode) page);
                foldersIter = profiledFolders.iterator();
                while (foldersIter.hasNext())
                {
                    FolderImpl aggregatePagesFolder = (FolderImpl) foldersIter.next();
                    NodeSet aggregatePages = aggregatePagesFolder.getPages(false);
                    Iterator aggregatePagesIter = aggregatePages.iterator();
                    while (aggregatePagesIter.hasNext())
                    {
                        AbstractNode siblingPageNode = (AbstractNode)aggregatePagesIter.next();
                        if (!siblingPageNode.isHidden())
                        {
                            siblingPages = addUniqueOrDescribedUrlNode((NodeSetImpl)siblingPages, setProfiledNodePathAndUrl(siblingPageNode));
                        }
                    }
                }

                // profile parent folder using profiled parent
                if ((((AbstractNode)folder).getParent(false) != null) &&
                    !((AbstractNode)folder).getProfiledPath().equals(Folder.PATH_SEPARATOR))
                {
                    AbstractNode parentFolderNode = (AbstractNode)((AbstractNode)folder).getParent(false);
                    if (!parentFolderNode.isHidden())
                    {
                        parentFolder = (Folder)setProfiledNodePathAndUrl(parentFolderNode);
                        allProfiledFolders.add(parentFolder);
                    }
                }

                // profile sibling folders by aggregating all siblings in profiled folders
                // using profiled general document order, (do not filter unordered siblings)
                siblingFolders = new NodeSetImpl(null, documentComparator);
                foldersIter = profiledFolders.iterator();
                while (foldersIter.hasNext())
                {
                    FolderImpl aggregateFoldersFolder = (FolderImpl) foldersIter.next();
                    NodeSet aggregateFolders = aggregateFoldersFolder.getFolders(false).exclusiveSubset("^.*/" + PROFILE_NAVIGATION_PROPERTY_FOLDER_PREFIX + "[^/]*$").exclusiveSubset("^.*/" + PROFILE_PROPERTY_FOLDER_PREFIX + "[^/]*$");
                    Iterator aggregateFoldersIter = aggregateFolders.iterator();
                    while (aggregateFoldersIter.hasNext())
                    {
                        AbstractNode siblingFolderNode = (AbstractNode)aggregateFoldersIter.next();
                        if (!siblingFolderNode.isHidden())
                        {
                            siblingFolders = addUniqueOrDescribedUrlNode((NodeSetImpl)siblingFolders, setProfiledNodePathAndUrl(siblingFolderNode));
                            allProfiledFolders.add(siblingFolderNode);
                        }
                    }
                }

                // profile document sets by aggregating all document set documents by document
                // set name in all profiled folders for page
                Map aggregateDocumentSets = new HashMap(12);
                foldersIter = searchProfiledFolders.iterator();
                while (foldersIter.hasNext())
                {
                    FolderImpl aggregateFolder = (FolderImpl) foldersIter.next();
                    NodeSet aggregateFolderDocumentSets = aggregateFolder.getDocumentSets(false);
                    Iterator aggregateFolderDocumentSetsIter = aggregateFolderDocumentSets.iterator();
                    while (aggregateFolderDocumentSetsIter.hasNext())
                    {
                        AbstractNode documentSetNode = (AbstractNode)setProfiledNodePathAndUrl((AbstractNode)aggregateFolderDocumentSetsIter.next());
                        if (!documentSetNode.isHidden())
                        {
                            String documentSetProfiledPath = documentSetNode.getProfiledPath();
                            if (!aggregateDocumentSets.containsKey(documentSetProfiledPath))
                            {
                                aggregateDocumentSets.put(documentSetProfiledPath, documentSetNode);
                            }
                        }
                    }
                }
               
                // generate profiled document sets from aggregated document set documents
                if (! aggregateDocumentSets.isEmpty())
                {
                    // profiled document sets to be returned
                    documentSets = new NodeSetImpl(null, documentComparator);
                    documentSetNames = new HashMap(aggregateDocumentSets.size() * 2);
                    documentSetNodeSets = new HashMap(aggregateDocumentSets.size() * 2);
                   
                    // profile each aggregated document set
                    Iterator documentSetsIter = aggregateDocumentSets.values().iterator();
                    while (documentSetsIter.hasNext())
                    {
                        // expand and profile each document set
                        DocumentSet documentSet = (DocumentSet) documentSetsIter.next();
                        NodeSetImpl documentSetNodes = expandAndProfileDocumentSet(pageContext.getLocators(), documentSet, null, "", documentSetNames, documentSetNodeSets, allProfiledFolders);
                        if (documentSetNodes != null)
                        {
                            documentSets.add(documentSet);
                        }
                    }
                }

                // profile root links by aggregating all links in profiled root folders
                if (! rootFallback && ! requestPath.equals(Folder.PATH_SEPARATOR))
                {
                    // profile root folders if required
                    searchPaths = generateProfilingSearchPaths(Folder.PATH_SEPARATOR, locator, true);
                    profiled = findProfiledPageAndFolders(searchPaths, profiledPage, profiledFolder, profiledFolders, searchProfiledFolders);
                }
                if (profiled)
                {
                    // profile root link document order folder meta data
                    List linkDocumentOrder = null;
                    foldersIter = profiledFolders.iterator();
                    while ((linkDocumentOrder == null) && foldersIter.hasNext())
                    {
                        FolderImpl profiledRootFolder = (FolderImpl) setProfiledNodePathAndUrl((AbstractNode) foldersIter.next());
                        if (((AbstractNode) profiledRootFolder).getProfiledPath().equals(Folder.PATH_SEPARATOR) &&
                            (profiledRootFolder.getMetaData() != null) && (profiledRootFolder.getMetaData().getDocumentOrder() != null) &&
                            ! profiledRootFolder.getMetaData().getDocumentOrder().isEmpty())
                        {
                            linkDocumentOrder = profiledRootFolder.getMetaData().getDocumentOrder();
                        }
                    }
                    Comparator linkDocumentComparator = new DocumentOrderComparator(linkDocumentOrder);

                    // profile root links using profiled document order
                    rootLinks = new NodeSetImpl(null, linkDocumentComparator);
                    foldersIter = profiledFolders.iterator();
                    while (foldersIter.hasNext())
                    {
                        FolderImpl aggregateLinksFolder = (FolderImpl) setProfiledNodePathAndUrl((AbstractNode) foldersIter.next());
                        if (aggregateLinksFolder.getProfiledPath().equals(Folder.PATH_SEPARATOR))
                        {
                            NodeSet aggregateLinks = aggregateLinksFolder.getLinks(false);
                            Iterator aggregateLinksIter = aggregateLinks.iterator();
                            while (aggregateLinksIter.hasNext())
                            {
                                AbstractNode rootLinkNode = (AbstractNode)aggregateLinksIter.next();
                                if (!rootLinkNode.isHidden())
                                {
                                    rootLinks = addUniqueOrDescribedUrlNode((NodeSetImpl)rootLinks, setProfiledNodePathAndUrl(rootLinkNode));
                                }
                            }
                        }
                    }
                }
                else
                {
                    // return empty root links
                    rootLinks = new NodeSetImpl(null);
                }
            }
            else
            {
                log.error("computeProfiledPageContext(): Failed to find profiled page and/or folder for " + requestPath + " at " + locator);
                throw new PageNotFoundException(requestPath + " at " + locator);
            }
        }
        else
        {
            // return request folder and page

            // managed folder and page
            try
            {
                // retrieve managed folder and page from request
                String folderPath = requestPath;
                if (folderPath.endsWith(Page.DOCUMENT_TYPE) || folderPath.endsWith(Folder.PATH_SEPARATOR))
                {
                    int lastSlashIndex = folderPath.lastIndexOf(Folder.PATH_SEPARATOR_CHAR);
                    if (lastSlashIndex > 0)
                    {
                        folderPath = folderPath.substring(0, lastSlashIndex);
                    }
                    else
                    {
                        folderPath = Folder.PATH_SEPARATOR;
                    }
                }
                folder = folderHandler.getFolder(folderPath);
                String pagePath = requestPath;
                if (! pagePath.endsWith(Page.DOCUMENT_TYPE))
                {
                    pagePath = folder.getDefaultPage(true);
                }
                page = ((FolderImpl)folder).getPage(pagePath, false);
            }
            catch (NodeException ne)
            {
            }
            if (page == null)
            {
                // fallback to default page for root folder
                log.warn("computeProfiledPageContext(): Falling back to managed root default page for " + requestPath);
                try
                {
                    folder = folderHandler.getFolder(Folder.PATH_SEPARATOR);
                    String pagePath = folder.getDefaultPage(true);
                    page = ((FolderImpl)folder).getPage(pagePath, false);
                }
                catch (NodeException ne)
                {
                }
            }

            // managed page context
            if (page != null)
            {
                // return folders and pages relative to requested page
                siblingPages = ((FolderImpl)folder).getPages(false);
                parentFolder = (Folder) ((AbstractNode)folder).getParent(false);
                siblingFolders = ((FolderImpl)folder).getFolders(false);
                try
                {
                    Folder rootFolder = folderHandler.getFolder(Folder.PATH_SEPARATOR);
                    rootLinks = ((FolderImpl)rootFolder).getLinks(false);
                }
                catch (NodeException ne)
                {
                }
                try
                {
                    // get default document set order from folder
                    Comparator documentComparator = ((NodeSetImpl)((FolderImpl)folder).getAllNodes()).getComparator();

                    // aggregate and expand document sets from page to root folder;
                    documentSets = new NodeSetImpl(null, documentComparator);
                    documentSetNames = new HashMap(8);
                    documentSetNodeSets = new HashMap(8);
                    Set uniqueDocumentSetPaths = new HashSet(8);
                    FolderImpl aggregateFolder = (FolderImpl)folder;
                    do
                    {
                        // aggregate uniquely named and expand folder document sets
                        Iterator documentSetsIter = aggregateFolder.getDocumentSets(false).iterator();
                        while (documentSetsIter.hasNext())
                        {
                            DocumentSet documentSet = (DocumentSet) documentSetsIter.next();
                            String documentSetPath = documentSet.getPath();

View Full Code Here

Examples of org.apache.jetspeed.om.folder.impl.FolderImpl

                            }
                           
                            // check folder for document order
                            try
                            {
                                FolderImpl folder = (FolderImpl) setProfiledNodePathAndUrl((AbstractNode) folderHandler.getFolder(folderPath));
                                if ((folder.getMetaData() != null) && (folder.getMetaData().getDocumentOrder() != null) &&
                                    ! folder.getMetaData().getDocumentOrder().isEmpty())
                                {
                                    documentOrder = folder.getMetaData().getDocumentOrder();
                                }               
                            }
                            catch (NodeException ne)
                            {
                            }
                        }
                    }
                }
            }

            // fallback to root search paths to determine document ordering
            if (documentOrder == null)
            {
                Iterator pathsIter = searchPaths.iterator();
                while ((documentOrder == null) && pathsIter.hasNext())
                {
                    // root search folder path
                    String folderPath = (String) pathsIter.next();
                    if (folderPath.endsWith(Folder.PATH_SEPARATOR) && (folderPath.length() > 1))
                    {
                        folderPath = folderPath.substring(0, folderPath.length()-1);
                    }

                    // check folder for document order
                    try
                    {
                        FolderImpl folder = (FolderImpl) setProfiledNodePathAndUrl((AbstractNode) folderHandler.getFolder(folderPath));
                        if ((folder.getMetaData() != null) && (folder.getMetaData().getDocumentOrder() != null) &&
                            ! folder.getMetaData().getDocumentOrder().isEmpty())
                        {
                            documentOrder = folder.getMetaData().getDocumentOrder();
                        }
                    }
                    catch (NodeException ne)
                    {
                    }
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.