All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.codehaus.mevenide.netbeans.ProjectProfileHandlerImpl Maven / Gradle / Ivy

The newest version!
/*
 *  Copyright 2008 Anuradha.
 * 
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 * 
 *       http://www.apache.org/licenses/LICENSE-2.0
 * 
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *  under the License.
 */
package org.codehaus.mevenide.netbeans;

import java.io.File;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.maven.model.Model;
import org.apache.maven.model.Profile;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.ProjectBuildingException;
import org.apache.maven.project.build.model.ModelLineage;
import org.codehaus.mevenide.netbeans.api.ProjectProfileHandler;
import org.codehaus.mevenide.netbeans.embedder.EmbedderFactory;
import org.codehaus.mevenide.netbeans.embedder.MavenSettingsSingleton;
import org.netbeans.spi.project.AuxiliaryConfiguration;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.FileUtil;
import org.openide.util.Exceptions;
import org.openide.xml.XMLUtil;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

/**
 *
 * @author Anuradha G
 */
public class ProjectProfileHandlerImpl implements ProjectProfileHandler {

    private static final String PROFILES = "profiles";//NOI18N
    private static final String ACTIVEPROFILES = "activeProfiles";//NOI18N
    private static final String SEPERATOR = " ";//NOI18N
    private static final String NAMESPACE = null;//FIXME add propper namespase
    private List privateProfiles = new ArrayList();
    private List sharedProfiles = new ArrayList();
    private AuxiliaryConfiguration ac;
    private NbMavenProject nmp;

    ProjectProfileHandlerImpl(NbMavenProject nmp, AuxiliaryConfiguration ac) {
        this.nmp = nmp;
        this.ac = ac;
        privateProfiles.addAll(retrieveActiveProfiles(ac, false));
        sharedProfiles.addAll(retrieveActiveProfiles(ac, true));
    }

    public List getAllProfiles() {
        Set profileIds = new HashSet();
        //pom+profiles.xml profiles come first
        extractProfiles(profileIds, nmp.getPOMFile());
        //Add settings file Properties
        profileIds.addAll(MavenSettingsSingleton.getInstance().createUserSettingsModel().
                getProfilesAsMap().keySet());

        return new ArrayList(profileIds);
    }

    public List getActiveProfiles(boolean shared) {
       return new ArrayList(shared ? sharedProfiles : privateProfiles);
    }
    public List getMergedActiveProfiles(boolean shared) {
                Set prifileides = new HashSet();
        MavenProject mavenProject = nmp.getOriginalMavenProject();
        List profiles = mavenProject.getActiveProfiles();
        for (Profile profile : profiles) {
            prifileides.add(profile.getId());
        }
        //read from Settings.xml
        List profileStrings = MavenSettingsSingleton.getInstance().createUserSettingsModel().getActiveProfiles();
        for (String profile : profileStrings) {
            prifileides.add(profile);
        }
        
        File basedir = FileUtil.normalizeFile(mavenProject.getBasedir());
        FileObject fileObject = FileUtil.toFileObject(basedir);
        //read from profiles.xml
        Iterator it2 = MavenSettingsSingleton.createProfilesModel(fileObject).getActiveProfiles().iterator();
        while (it2.hasNext()) {
            prifileides.add((String) it2.next());
        }
        prifileides.addAll(getActiveProfiles(shared));
        return new ArrayList(prifileides);
    }

    public void disableProfile(String id, boolean shared) {
        Element element = ac.getConfigurationFragment(PROFILES, NAMESPACE, shared);
        if (element == null) {

            String root = "project-private"; // NOI18N"

            Document doc = XMLUtil.createDocument(root, NAMESPACE, null, null);
            element = doc.createElementNS(NAMESPACE, PROFILES);
        }
        String activeProfiles = element.getAttributeNS(NAMESPACE, ACTIVEPROFILES);

        if (activeProfiles != null && activeProfiles.length() > 0) {
            StringTokenizer tokenizer = new StringTokenizer(activeProfiles, SEPERATOR);
            Set set = new HashSet(tokenizer.countTokens());
            while (tokenizer.hasMoreTokens()) {
                set.add(tokenizer.nextToken());
            }
            set.remove(id);
            StringBuffer buffer = new StringBuffer();
            for (String profle : set) {
                buffer.append(profle).append(SEPERATOR);
            }
            element.setAttributeNS(NAMESPACE, ACTIVEPROFILES, buffer.toString().trim());
        }

        ac.putConfigurationFragment(element, shared);
        if(shared){
            sharedProfiles.remove(id);
        }else{
            privateProfiles.remove(id);
        }
    }

    public void enableProfile(String id, boolean shared) {
        Element element = ac.getConfigurationFragment(PROFILES, NAMESPACE, shared);
        if (element == null) {

            String root = "project-private"; // NOI18N"

            Document doc = XMLUtil.createDocument(root, NAMESPACE, null, null);
            element = doc.createElementNS(NAMESPACE, PROFILES);
        }


        String activeProfiles = element.getAttributeNS(NAMESPACE, ACTIVEPROFILES);
        element.setAttributeNS(NAMESPACE, ACTIVEPROFILES, activeProfiles + SEPERATOR + id);
        ac.putConfigurationFragment(element, shared);
        if(shared){
            if(!sharedProfiles.contains(id))
             sharedProfiles.add(id);
        }else{
            if(!privateProfiles.contains(id))
             privateProfiles.add(id);
        }
    }

    private static void extractProfiles(Set profileIds, File file) {
        extractProfilesFromModelLineage(file, profileIds);
        File basedir = FileUtil.normalizeFile(file.getParentFile());
        FileObject fileObject = FileUtil.toFileObject(basedir);
        //read from profiles.xml
        Iterator it2 = MavenSettingsSingleton.createProfilesModel(fileObject).getProfiles().iterator();
        while (it2.hasNext()) {
            org.apache.maven.profiles.Profile prof = (org.apache.maven.profiles.Profile) it2.next();
            profileIds.add(prof.getId());
        }
    }
    
    private static void extractProfilesFromModelLineage(File file, Set profileIds) {
        try {
            ModelLineage lineage = EmbedderFactory.createModelLineage(file, EmbedderFactory.createOnlineEmbedder(), true);
            Iterator it = lineage.modelIterator();
            while (it.hasNext()) {
                Model mdl = (Model) it.next();
                List mdlProfiles = mdl.getProfiles();
                if (mdlProfiles != null) {
                    Iterator it2 = mdlProfiles.iterator();
                    while (it2.hasNext()) {
                        Profile prf = (Profile) it2.next();
                        profileIds.add(prf.getId());
                    }
                }
            }
            if (lineage != null && lineage.getOriginatingModel() != null) {
                List modules = lineage.getOriginatingModel().getModules();
                File basedir = FileUtil.normalizeFile(file.getParentFile());
                for (String module : modules) {
                    File childPom = FileUtil.normalizeFile(new File(basedir, module));
                    if (childPom.exists() && !childPom.isFile()) {
                        childPom = new File(childPom, "pom.xml"); //NOI18N
                    }
                    if (childPom.isFile()) {
                        extractProfilesFromModelLineage(childPom, profileIds);
                    }
                }
            }
        } catch (ProjectBuildingException ex) {
            Logger.getLogger(ProjectProfileHandlerImpl.class.getName()).log(Level.FINE, "Error reading model lineage", ex);
        }
    }

    private List retrieveActiveProfiles(AuxiliaryConfiguration ac, boolean shared) {

        Set prifileides = new HashSet();
        Element element = ac.getConfigurationFragment(PROFILES, NAMESPACE, shared);
        if (element != null) {

            String activeProfiles = element.getAttributeNS(NAMESPACE, ACTIVEPROFILES);

            if (activeProfiles != null && activeProfiles.length() > 0) {
                StringTokenizer tokenizer = new StringTokenizer(activeProfiles, SEPERATOR);

                while (tokenizer.hasMoreTokens()) {
                    prifileides.add(tokenizer.nextToken());
                }
            }
        }
        return new ArrayList(prifileides);
    }



 
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy