Package org.fao.geonet.kernel.harvest.harvester.geonet20

Source Code of org.fao.geonet.kernel.harvest.harvester.geonet20.GeonetResult

//=============================================================================
//===  Copyright (C) 2001-2007 Food and Agriculture Organization of the
//===  United Nations (FAO-UN), United Nations World Food Programme (WFP)
//===  and United Nations Environment Programme (UNEP)
//===
//===  This program is free software; you can redistribute it and/or modify
//===  it under the terms of the GNU General Public License as published by
//===  the Free Software Foundation; either version 2 of the License, or (at
//===  your option) any later version.
//===
//===  This program is distributed in the hope that it will be useful, but
//===  WITHOUT ANY WARRANTY; without even the implied warranty of
//===  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
//===  General Public License for more details.
//===
//===  You should have received a copy of the GNU General Public License
//===  along with this program; if not, write to the Free Software
//===  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
//===
//===  Contact: Jeroen Ticheler - FAO - Viale delle Terme di Caracalla 2,
//===  Rome - Italy. email: geonetwork@osgeo.org
//==============================================================================

package org.fao.geonet.kernel.harvest.harvester.geonet20;

import jeeves.server.context.ServiceContext;
import org.fao.geonet.Logger;
import org.fao.geonet.constants.Geonet;
import org.fao.geonet.domain.Source;
import org.fao.geonet.exceptions.BadInputEx;
import org.fao.geonet.exceptions.UserNotFoundEx;
import org.fao.geonet.kernel.harvest.harvester.AbstractHarvester;
import org.fao.geonet.kernel.harvest.harvester.AbstractParams;
import org.fao.geonet.kernel.harvest.harvester.CategoryMapper;
import org.fao.geonet.kernel.harvest.harvester.HarvestResult;
import org.fao.geonet.lib.Lib;
import org.fao.geonet.repository.SourceRepository;
import org.fao.geonet.resources.Resources;
import org.fao.geonet.utils.GeonetHttpRequestFactory;
import org.fao.geonet.utils.Xml;
import org.fao.geonet.utils.XmlRequest;
import org.jdom.Element;

import java.io.File;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.UUID;

//=============================================================================

public class Geonet20Harvester extends AbstractHarvester
{

  //--------------------------------------------------------------------------
  //---
  //--- Init
  //---
  //--------------------------------------------------------------------------

  protected void doInit(Element node, ServiceContext context) throws BadInputEx
  {
    params = new GeonetParams(dataMan);
        super.setParams(params);
        params.create(node);
  }

  //---------------------------------------------------------------------------
  //---
  //--- Add
  //---
  //---------------------------------------------------------------------------

  protected String doAdd(Element node) throws BadInputEx, SQLException
  {
    params = new GeonetParams(dataMan);
        super.setParams(params);

        //--- retrieve/initialize information
    params.create(node);

    //--- force the creation of a new uuid
    params.uuid = UUID.randomUUID().toString();

    String id = settingMan.add("harvesting", "node", getType());

    storeNode(params, "id:"+id);
        Source source = new Source(params.uuid, params.name, true);
        context.getBean(SourceRepository.class).save(source);
        Resources.copyLogo(context, "images" + File.separator + "harvesting" + File.separator + "gn20.gif", params.uuid);
       
    return id;
  }

  //---------------------------------------------------------------------------
  //---
  //--- Update
  //---
  //---------------------------------------------------------------------------

  protected void doUpdate(String id, Element node) throws BadInputEx, SQLException
  {
    //--- update variables

    GeonetParams copy = params.copy();

        //--- update variables
    copy.update(node);

    String path = "harvesting/id:"+ id;

    settingMan.removeChildren(path);

    //--- update database
    storeNode(copy, path);

    //--- we update a copy first because if there is an exception GeonetParams
    //--- could be half updated and so it could be in an inconsistent state

        Source source = new Source(copy.uuid, copy.name, true);
        context.getBean(SourceRepository.class).save(source);

        params = copy;
        super.setParams(params);

    }

  //---------------------------------------------------------------------------

  protected void storeNodeExtra(AbstractParams p, String path,
                      String siteId, String optionsId) throws SQLException
  {
    GeonetParams params = (GeonetParams) p;
        super.setParams(params);

        settingMan.add("id:"+siteId, "host",    params.host);

    //--- store search nodes

    for (Search s : params.getSearches())
    {
      String  searchID = settingMan.add(path, "search", "");

      settingMan.add("id:"+searchID, "freeText", s.freeText);
      settingMan.add("id:"+searchID, "title",    s.title);
      settingMan.add("id:"+searchID, "abstract", s.abstrac);
      settingMan.add("id:"+searchID, "keywords", s.keywords);
      settingMan.add("id:"+searchID, "digital",  s.digital);
      settingMan.add("id:"+searchID, "hardcopy", s.hardcopy);
      settingMan.add("id:"+searchID, "siteId",   s.siteId);
    }
  }

  //---------------------------------------------------------------------------
  //---
  //--- addHarvestInfo
  //---
  //---------------------------------------------------------------------------

  public void addHarvestInfo(Element info, String id, String uuid)
  {
    super.addHarvestInfo(info, id, uuid);

    String small = params.host +
              "/srv/en/resources.get2?access=public&uuid="+uuid+"&fname=";

    info.addContent(new Element("smallThumbnail").setText(small));
  }

  //---------------------------------------------------------------------------
  //---
  //--- AddInfo
  //---
  //---------------------------------------------------------------------------

  protected void doAddInfo(Element node)
  {
    //--- if the harvesting is not started yet, we don't have any info

    if (result == null)
      return;

    //--- ok, add proper info

    Element info = node.getChild("info");

    for (HarvestResult ar : result.alResult)
    {
      Element site = new Element("search");
      site.setAttribute("siteId", ar.siteId);

      add(site, "total",     ar.totalMetadata);
      add(site, "added",     ar.addedMetadata);
      add(site, "updated",   ar.updatedMetadata);
      add(site, "unchanged", ar.unchangedMetadata);
      add(site, "skipped",   ar.schemaSkipped+ ar.uuidSkipped);
      add(site, "removed",   ar.locallyRemoved);
            add(site, "doesNotValidate",ar.doesNotValidate);

      info.addContent(site);
    }
  }

  //---------------------------------------------------------------------------
  //---
  //--- GetResult
  //---
  //---------------------------------------------------------------------------

    public Element getResult() {
    return new Element("result"); // HarvestHistory not supported for this
                                  // old harvester
  }

  //---------------------------------------------------------------------------
  //---
  //--- Harvest
  //---
  //---------------------------------------------------------------------------

  public void doHarvest(Logger log) throws Exception
  {
    CategoryMapper localCateg = new CategoryMapper(context);

        XmlRequest req = context.getBean(GeonetHttpRequestFactory.class).createXmlRequest(params.host);

        servletName = req.getAddress();

    Lib.net.setupProxy(context, req);

    String name = getParams().name;

    //--- login

    if (params.useAccount)
    {
      log.info("Login into : "+ name);

      req.setAddress(servletName +"/srv/en/"+ Geonet.Service.XML_LOGIN);
      req.addParam("username", params.username);
      req.addParam("password", params.password);

      Element response = req.execute();

      if (!response.getName().equals("ok"))
        throw new UserNotFoundEx(params.username);
    }

    //--- search

    result = new GeonetResult();

    Aligner aligner = new Aligner(log, req, params, dataMan, context,
                        localCateg);

    for(Search s : params.getSearches())
    {
      log.info("Searching on : "+ name +"/"+ s.siteId);

      req.setAddress(servletName +"/srv/en/"+ Geonet.Service.XML_SEARCH);

      Element searchResult = req.execute(s.createRequest());

            if(log.isDebugEnabled()) log.debug("Obtained:\n"+Xml.getString(searchResult));

      //--- site alignment
      HarvestResult ar = aligner.align(searchResult, s.siteId);

      //--- collect some stats
      result.alResult.add(ar);
    }

    //--- logout

    if (params.useAccount)
    {
      log.info("Logout from : "+ name);

      req.clearParams();
      req.setAddress("/"+ params.getServletPath() +"/srv/en/"+ Geonet.Service.XML_LOGOUT);
    }

        dataMan.flush();
    }

  //---------------------------------------------------------------------------
  //---
  //--- Variables
  //---
  //---------------------------------------------------------------------------

  private GeonetParams params;
  private GeonetResult result;

    private String servletName;
}

//=============================================================================

class GeonetResult
{
  public ArrayList<HarvestResult> alResult = new ArrayList<HarvestResult>();
}
TOP

Related Classes of org.fao.geonet.kernel.harvest.harvester.geonet20.GeonetResult

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.