<commit_before>/*
 * Copyright 2019 hbz NRW (http://www.hbz-nrw.de/)
 *
 * 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.
 *
 */
package helper;

import java.io.File;
import java.nio.file.Files;

import actions.Modify;
import actions.Modify.UpdateNodeException;
import archive.fedora.CopyUtils;
import models.Gatherconf;
import models.Globals;
import models.Gatherconf.CrawlerSelection;
import models.Node;
import models.RegalObject;
import play.Logger;
import play.Play;
import com.yourmediashelf.fedora.client.request.GetDatastream;
import com.yourmediashelf.fedora.client.request.GetDatastreamDissemination;
import com.yourmediashelf.fedora.client.response.FedoraResponse;
import com.yourmediashelf.fedora.client.response.GetDatastreamResponse;

/**
 * Methoden zum Veröffentlichen von Websites (openWayback AccessPoint
 * "weltweit"). Methoden zum Zurückziehen veröffentlichter Websites (openWayback
 * AccessPoint "lesesaal" oder "wayback").
 * 
 * @author <NAME>, hbz
 */
public class WebsiteVersionPublisher {

	private static final Logger.ALogger WebgatherLogger =
			Logger.of("webgatherer");
	// Das Unterverzeichnis in public-data/ (volle Pfadangabe) als Java-Klasse
	// "File"
	private static File publicCrawlDir = null;
	private static String jobDir = null;
	private static String msg = null;

	/**
	 * Veröffentlicht und De-Publiziert Webschnitte
	 * 
	 * @param node Der Knoten (Klasse models.Node) einer zu patchenden Ressource
	 * @param object Das Regal-Objekt einer zu patchenden Ressource
	 * @return eine Textnachricht über die hier ausgeführten Aktionen
	 */
	public String handleWebpagePublishing(Node node, RegalObject object) {
		try {
			if (object.getAccessScheme().equals("public")) {
				if (node.getContentType().equals("version")) {
					publishWebpageVersion(node);
					return "Webschnitt ist veröffentlicht. Das Indexieren des Webschnitts in der OpenWayback-Maschine kann mehrere Minuten dauern.";
				} else if (node.getContentType().equals("webpage")) {
					return "Webpage ist veröffentlicht.";
				}
			}

			if (object.getAccessScheme().equals("restricted")
					&& node.getContentType().equals("version")) {
				retreatWebpageVersion(node);
				return "Webschnitt ist auf zugriffsbeschränkt (Lesesaal) gesetzt.";
			} else if (node.getContentType().equals("webpage")) {
				return "Webpage ist nur im Lesesaal zugänglich.";
			}
			return "";
		} catch (Exception e) {
			play.Logger.error("", e);
			return e.toString();
		}
	}

	/**
	 * Diese Methode realisiert sowohl das Veröffentlichen als auch das
	 * De-Publizieren eines Webschnitss anhand des Zugriffsrechts "accessScheme".
	 * Diese Methode wird über den Endpoint /resource/:pid/publishVersion
	 * aufgerufen.
	 * 
	 * @param node der Knoten des Webschnitts<commit_msg>catch null pointer in handleWebpagePublishing<commit_after>/*
 * Copyright 2019 hbz NRW (http://www.hbz-nrw.de/)
 *
 * 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.
 *
 */
package helper;

import java.io.File;
import java.nio.file.Files;

import actions.Modify;
import actions.Modify.UpdateNodeException;
import archive.fedora.CopyUtils;
import models.Gatherconf;
import models.Globals;
import models.Gatherconf.CrawlerSelection;
import models.Node;
import models.RegalObject;
import play.Logger;
import play.Play;
import com.yourmediashelf.fedora.client.request.GetDatastream;
import com.yourmediashelf.fedora.client.request.GetDatastreamDissemination;
import com.yourmediashelf.fedora.client.response.FedoraResponse;
import com.yourmediashelf.fedora.client.response.GetDatastreamResponse;

/**
 * Methoden zum Veröffentlichen von Websites (openWayback AccessPoint
 * "weltweit"). Methoden zum Zurückziehen veröffentlichter Websites (openWayback
 * AccessPoint "lesesaal" oder "wayback").
 * 
 * @author <NAME>, hbz
 */
public class WebsiteVersionPublisher {

	private static final Logger.ALogger WebgatherLogger =
			Logger.of("webgatherer");
	// Das Unterverzeichnis in public-data/ (volle Pfadangabe) als Java-Klasse
	// "File"
	private static File publicCrawlDir = null;
	private static String jobDir = null;
	private static String msg = null;

	/**
	 * Veröffentlicht und De-Publiziert Webschnitte
	 * 
	 * @param node Der Knoten (Klasse models.Node) einer zu patchenden Ressource
	 * @param object Das Regal-Objekt einer zu patchenden Ressource
	 * @return eine Textnachricht über die hier ausgeführten Aktionen
	 */
	public String handleWebpagePublishing(Node node, RegalObject object) {
		try {
			if ((object == null) || (object.getAccessScheme() == null)) {
				play.Logger.warn("Zugriffsrecht für ID " + node.getPid()
						+ " kann nicht ermittelt werden!");
				return "";
			}
			if (object.getAccessScheme().equals("public")) {
				if (node.getContentType().equals("version")) {
					publishWebpageVersion(node);
					return "Webschnitt ist veröffentlicht. Das Indexieren des Webschnitts in der OpenWayback-Maschine kann mehrere Minuten dauern.";
				} else if (node.getContentType().equals("webpage")) {
					return "Webpage ist veröffentlicht.";
				}
			}

			if (object.getAccessScheme().equals("restricted")
					&& node.getContentType().equals("version")) {
				retreatWebpageVersion(node);
				return "Webschnitt ist auf zugriffsbeschränkt (Lesesaal) gesetzt.";
			} else if (node.getContentType().equals("webpage")) {
				return "Webpage ist nur im Lesesaal zugänglich.";
			}
			return "";
		} catch (Exception e) {
			play.Logger.error("", e);
			return e.toString();
		}
	}

	/**
	 * Diese Methode realisiert sowohl das Veröffentlichen als auch das
	 * De-Publizieren eines Webschnitss anhand des Zugriffsrechts "accessScheme".
	 * Diese Methode wird über den Endpoint /resource/:pid/publishVersion
	 * aufgerufen.
	 * 
	 * @param node der Knoten des Webschnitts
{'fraction_non_alphanumeric': 0.09949882075471699, 'fraction_numerical': 0.0023584905660377358, 'mean_word_length': 4.313234142521535, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 4, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3733220', 'n_tokens_mistral': 2245, 'n_tokens_neox': 2090, 'n_words': 607}