Package org.fao.geonet.kernel.harvest

Source Code of org.fao.geonet.kernel.harvest.BaseAligner

package org.fao.geonet.kernel.harvest;

import jeeves.server.context.ServiceContext;
import org.fao.geonet.Logger;

import org.fao.geonet.domain.Metadata;
import org.fao.geonet.domain.MetadataCategory;
import org.fao.geonet.kernel.DataManager;
import org.fao.geonet.kernel.harvest.harvester.AbstractHarvester;
import org.fao.geonet.kernel.harvest.harvester.CategoryMapper;
import org.fao.geonet.kernel.harvest.harvester.GroupMapper;
import org.fao.geonet.kernel.harvest.harvester.Privileges;
import org.fao.geonet.kernel.search.MetadataRecordSelector;
import org.fao.geonet.repository.MetadataCategoryRepository;
import org.fao.geonet.repository.MetadataRepository;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
*
* This class helps {@link AbstractHarvester} instances to
* process all metadata collected on the harvest.
*
* Takes care of common properties like categories or privileges.
*
* Not all harvesters use this. They should. But don't. //FIXME?
*
* @author heikki doeleman
*/
public abstract class BaseAligner {

    /**
     * TODO Javadoc.
     *
     * @param categories
     * @param localCateg
     * @param log
     * @throws Exception
     */
    public void addCategories(Metadata metadata, Iterable<String> categories, CategoryMapper localCateg, ServiceContext context,
                              Logger log, String serverCategory) {

        final MetadataCategoryRepository categoryRepository = context.getBean(MetadataCategoryRepository.class);
        Map<String, MetadataCategory> nameToCategoryMap = new HashMap<String, MetadataCategory>();
        for (MetadataCategory metadataCategory : categoryRepository.findAll()) {
            nameToCategoryMap.put(""+metadataCategory.getId(), metadataCategory);
        }
        for(String catId : categories)  {
            String name = localCateg.getName(catId);

            if (name == null) {
                if(log.isDebugEnabled()) {
                    log.debug("    - Skipping removed category with id:"+ catId);
                }
            }
            else {
                if(log.isDebugEnabled()) {
                    log.debug("    - Setting category : "+ name);
                }
                final MetadataCategory metadataCategory = nameToCategoryMap.get(catId);
                if (metadataCategory != null) {
                    metadata.getCategories().add(metadataCategory);
                } else {
                    log.warning("Unable to map category: "+catId+" ("+name+") to a category in Geonetwork");
                }
            }
        }

        if (serverCategory != null) {
            String catId = localCateg.getID(serverCategory);
            if (catId == null) {
                if(log.isDebugEnabled()) log.debug("    - Skipping removed category :" + serverCategory);
            } else {
                final MetadataCategory metadataCategory = nameToCategoryMap.get(catId);
                if (metadataCategory != null) {
                    metadata.getCategories().add(metadataCategory);
                } else {
                    log.warning("Unable to map category: "+catId+" to a category in Geonetwork");
                }
            }
        }
        context.getBean(MetadataRepository.class).save(metadata);
    }

    /**
     *
     * @param id
     * @param privilegesIterable
     * @param localGroups
     * @param dataMan
     * @param context
     * @param log
     * @throws Exception
     */
    public void addPrivileges(String id, Iterable<Privileges> privilegesIterable, GroupMapper localGroups, DataManager dataMan, ServiceContext context, Logger log) throws Exception {
        for (Privileges priv : privilegesIterable) {
            String name = localGroups.getName(priv.getGroupId());

            if (name == null) {
                if(log.isDebugEnabled()) {
                    log.debug("    - Skipping removed group with id:"+ priv.getGroupId());
                }
            }
            else {
                if(log.isDebugEnabled()) {
                    log.debug("    - Setting privileges for group : "+ name);
                }

                for (int opId: priv.getOperations()) {
                    name = dataMan.getAccessManager().getPrivilegeName(opId);

                    //--- all existing operation
                    if (name != null) {
                        if(log.isDebugEnabled()) {
                            log.debug("       --> Operation: "+ name);
                        }
                        dataMan.setOperation(context, id, priv.getGroupId(), opId +"");
                    }
                }
            }
        }
    }
}
TOP

Related Classes of org.fao.geonet.kernel.harvest.BaseAligner

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.