Java tutorial
/******************************************************************************* * Copyright (c) 2009 Alexander Koderman <ak[at]sernet[dot]de>. * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation, either version 3 * 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 Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General Public * License along with this program. * If not, see <http://www.gnu.org/licenses/>. * * Contributors: * Alexander Koderman <ak[at]sernet[dot]de> - initial API and implementation ******************************************************************************/ package sernet.gs.ui.rcp.gsimport; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.io.Reader; import java.io.StringReader; import java.sql.Clob; import java.sql.SQLException; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.swing.text.BadLocationException; import javax.swing.text.Document; import javax.swing.text.rtf.RTFEditorKit; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import sernet.gs.reveng.MbBaust; import sernet.gs.reveng.MbDringlichkeit; import sernet.gs.reveng.MbDringlichkeitId; import sernet.gs.reveng.MbDringlichkeitTxt; import sernet.gs.reveng.MbGefaehr; import sernet.gs.reveng.MbRolleTxt; import sernet.gs.reveng.MsUnj; import sernet.gs.reveng.NZielobjekt; import sernet.gs.reveng.importData.BausteineMassnahmenResult; import sernet.gs.reveng.importData.ESAResult; import sernet.gs.reveng.importData.GSDBConstants; import sernet.gs.reveng.importData.GSVampire; import sernet.gs.reveng.importData.NotizenMassnahmeResult; import sernet.gs.reveng.importData.RAGefaehrdungenResult; import sernet.gs.reveng.importData.RAGefaehrdungsMassnahmenResult; import sernet.gs.reveng.importData.ZielobjektTypeResult; import sernet.gs.ui.rcp.main.bsi.model.GSScraperUtil; import sernet.gs.ui.rcp.main.common.model.CnAElementHome; import sernet.gs.ui.rcp.main.service.grundschutzparser.InputUtil; import sernet.verinice.interfaces.CommandException; import sernet.verinice.model.bsi.Anwendung; import sernet.verinice.model.bsi.BausteinUmsetzung; import sernet.verinice.model.bsi.Client; import sernet.verinice.model.bsi.Gebaeude; import sernet.verinice.model.bsi.ITVerbund; import sernet.verinice.model.bsi.MassnahmenUmsetzung; import sernet.verinice.model.bsi.NetzKomponente; import sernet.verinice.model.bsi.Person; import sernet.verinice.model.bsi.Raum; import sernet.verinice.model.bsi.Schutzbedarf; import sernet.verinice.model.bsi.Server; import sernet.verinice.model.bsi.SonstIT; import sernet.verinice.model.bsi.TelefonKomponente; import sernet.verinice.model.bsi.risikoanalyse.GefaehrdungsUmsetzung; import sernet.verinice.model.bsi.risikoanalyse.OwnGefaehrdung; import sernet.verinice.model.common.CnATreeElement; import sernet.verinice.service.gstoolimport.MassnahmenFactory; /** * Utility class to convert result sets (from gstool databases) to * verinice-objects. * * @author koderman@sernet.de * @author sh@sernet.de - added ESA handling * @version $Rev$ $LastChangedDate$ $LastChangedBy$ * */ public class TransferData { private static final Logger LOG = Logger.getLogger(TransferData.class); private static char KEIN_SIEGEL = '-'; private final GSVampire vampire; private final boolean importRollen; private List<MbDringlichkeitTxt> dringlichkeiten; private Map<String, String> drgMap; private static final Map<String, String> typeIdESAEntscheidungBisMap = new HashMap<>(8); private static final Map<String, String> typeIdESAEntscheidungAmMap = new HashMap<>(8); private static final Map<String, String> typeIdESAEntscheidungDurchMap = new HashMap<>(8); static { typeIdESAEntscheidungBisMap.put(Raum.TYPE_ID, Raum.PROP_ESA_ENTSCHEIDUNG_BIS); typeIdESAEntscheidungBisMap.put(Anwendung.TYPE_ID, Anwendung.PROP_ESA_ENTSCHEIDUNG_BIS); typeIdESAEntscheidungBisMap.put(Client.TYPE_ID, Client.PROP_ESA_ENTSCHEIDUNG_BIS); typeIdESAEntscheidungBisMap.put(Gebaeude.TYPE_ID, Gebaeude.PROP_ESA_ENTSCHEIDUNG_BIS); typeIdESAEntscheidungBisMap.put(NetzKomponente.TYPE_ID, NetzKomponente.PROP_ESA_ENTSCHEIDUNG_BIS); typeIdESAEntscheidungBisMap.put(Server.TYPE_ID, Server.PROP_ESA_ENTSCHEIDUNG_BIS); typeIdESAEntscheidungBisMap.put(SonstIT.TYPE_ID, SonstIT.PROP_ESA_ENTSCHEIDUNG_BIS); typeIdESAEntscheidungBisMap.put(TelefonKomponente.TYPE_ID, TelefonKomponente.PROP_ESA_ENTSCHEIDUNG_BIS); typeIdESAEntscheidungAmMap.put(Raum.TYPE_ID, Raum.PROP_ESA_ENTSCHEIDUNG_AM); typeIdESAEntscheidungAmMap.put(Anwendung.TYPE_ID, Anwendung.PROP_ESA_ENTSCHEIDUNG_AM); typeIdESAEntscheidungAmMap.put(Client.TYPE_ID, Client.PROP_ESA_ENTSCHEIDUNG_AM); typeIdESAEntscheidungAmMap.put(Gebaeude.TYPE_ID, Gebaeude.PROP_ESA_ENTSCHEIDUNG_AM); typeIdESAEntscheidungAmMap.put(NetzKomponente.TYPE_ID, NetzKomponente.PROP_ESA_ENTSCHEIDUNG_AM); typeIdESAEntscheidungAmMap.put(Server.TYPE_ID, Server.PROP_ESA_ENTSCHEIDUNG_AM); typeIdESAEntscheidungAmMap.put(SonstIT.TYPE_ID, SonstIT.PROP_ESA_ENTSCHEIDUNG_AM); typeIdESAEntscheidungAmMap.put(TelefonKomponente.TYPE_ID, TelefonKomponente.PROP_ESA_ENTSCHEIDUNG_AM); typeIdESAEntscheidungDurchMap.put(Raum.TYPE_ID, Raum.PROP_ESA_ENTSCHEIDUNG_DURCH); typeIdESAEntscheidungDurchMap.put(Anwendung.TYPE_ID, Anwendung.PROP_ESA_ENTSCHEIDUNG_DURCH); typeIdESAEntscheidungDurchMap.put(Client.TYPE_ID, Client.PROP_ESA_ENTSCHEIDUNG_DURCH); typeIdESAEntscheidungDurchMap.put(Gebaeude.TYPE_ID, Gebaeude.PROP_ESA_ENTSCHEIDUNG_DURCH); typeIdESAEntscheidungDurchMap.put(NetzKomponente.TYPE_ID, NetzKomponente.PROP_ESA_ENTSCHEIDUNG_DURCH); typeIdESAEntscheidungDurchMap.put(Server.TYPE_ID, Server.PROP_ESA_ENTSCHEIDUNG_DURCH); typeIdESAEntscheidungDurchMap.put(SonstIT.TYPE_ID, SonstIT.PROP_ESA_ENTSCHEIDUNG_DURCH); typeIdESAEntscheidungDurchMap.put(TelefonKomponente.TYPE_ID, TelefonKomponente.PROP_ESA_ENTSCHEIDUNG_DURCH); } public TransferData(GSVampire vampire, boolean importRollen) { this.vampire = vampire; this.importRollen = importRollen; } public void transfer(ITVerbund itverbund, ZielobjektTypeResult result) throws CommandException { NZielobjekt source = result.zielobjekt; itverbund.setTitel(source.getName()); itverbund.setExtId(result.zielobjekt.getGuid()); CnAElementHome.getInstance().update(itverbund); } public void transfer(CnATreeElement element, ZielobjektTypeResult result) { String typeId = element.getTypeId(); if (typeId.equals(Anwendung.TYPE_ID)) { typedTransfer((Anwendung) element, result); } else if (typeId.equals(Client.TYPE_ID)) { typedTransfer((Client) element, result); } else if (typeId.equals(Server.TYPE_ID)) { typedTransfer((Server) element, result); } else if (typeId.equals(Person.TYPE_ID)) { typedTransfer((Person) element, result); } else if (typeId.equals(TelefonKomponente.TYPE_ID)) { typedTransfer((TelefonKomponente) element, result); } else if (typeId.equals(SonstIT.TYPE_ID)) { typedTransfer((SonstIT) element, result); } else if (typeId.equals(NetzKomponente.TYPE_ID)) { typedTransfer((NetzKomponente) element, result); } else if (typeId.equals(Gebaeude.TYPE_ID)) { typedTransfer((Gebaeude) element, result); } else if (typeId.equals(Raum.TYPE_ID)) { typedTransfer((Raum) element, result); } // use GSTOOL guid as extId: element.setExtId(result.zielobjekt.getGuid()); } /** * Transfer fields for "Ergnzende Sicherheitsanalyse" from GSTOOL to * existing Zielobjekt. * * @param target * @param esa */ public void transferESA(CnATreeElement target, ESAResult esa) { // Zielobjekt-erg.sich.analyse // risikoanalyse J/N nZobEsa esamsunj // begrndung bes. einsatz J/N Esaeinsatz 0 nein, 1 ja // begrndung nicht mit bst. J/N esamodellierung // Begrndung-text esabegrndung // entscheidung entscheiddurch oder setEsaTrue(target, esa.getEinsatz(), esa.getModellierung()); setRATrueFalse(target, esa.getUnj()); String begruendung = ""; if (esa.getEntscheidungDurch() != null && esa.getEntscheidungDurch().length() > 0) { begruendung += "Entscheidung durch: " + esa.getEntscheidungDurch() + "\n"; } begruendung += esa.getBegruendung(); setEsaBegruendung(target, begruendung); target = setESAEntscheidung(target, esa.getZmiName(), esa.getEntscheidungBis(), esa.getEntscheidungAm()); } private CnATreeElement setESAEntscheidung(CnATreeElement target, String entscheidungDurch, Date entscheidungBis, Date entscheidungAm) { target = setESAEntscheidungDurch(target, entscheidungDurch); target = setESAEntscheidungAm(target, entscheidungAm); target = setESAEntscheidungBis(target, entscheidungBis); return target; } private CnATreeElement setESAEntscheidungBis(CnATreeElement target, Date entscheidungBis) { if (entscheidungBis != null && typeIdESAEntscheidungBisMap.containsKey(target.getTypeId())) { target.setSimpleProperty(typeIdESAEntscheidungBisMap.get(target.getTypeId()), String.valueOf(entscheidungBis.getTime())); } return target; } private CnATreeElement setESAEntscheidungAm(CnATreeElement target, Date entscheidungAm) { if (entscheidungAm != null && typeIdESAEntscheidungAmMap.containsKey(target.getTypeId())) { target.setSimpleProperty(typeIdESAEntscheidungAmMap.get(target.getTypeId()), String.valueOf(entscheidungAm.getTime())); } return target; } private CnATreeElement setESAEntscheidungDurch(CnATreeElement target, String entscheidungDurch) { if (StringUtils.isNotEmpty(entscheidungDurch) && typeIdESAEntscheidungDurchMap.containsKey(target.getTypeId())) { target.setSimpleProperty(typeIdESAEntscheidungDurchMap.get(target.getTypeId()), entscheidungDurch); } return target; } /** * @param target * @param begruendung */ private void setEsaBegruendung(CnATreeElement target, String begruendung) { if (target.getTypeId().equals(Raum.TYPE_ID)) { target.setSimpleProperty("raum_risikoanalyse_begruendung", begruendung); } if (target.getTypeId().equals(Anwendung.TYPE_ID)) { target.setSimpleProperty("anwendung_risikoanalyse_begruendung", begruendung); } if (target.getTypeId().equals(Client.TYPE_ID)) { target.setSimpleProperty("client_risikoanalyse_begruendung", begruendung); } if (target.getTypeId().equals(Gebaeude.TYPE_ID)) { target.setSimpleProperty("gebaeude_risikoanalyse_begruendung", begruendung); } if (target.getTypeId().equals(NetzKomponente.TYPE_ID)) { target.setSimpleProperty("nkkomponente_risikoanalyse_begruendung", begruendung); } if (target.getTypeId().equals(Server.TYPE_ID)) { target.setSimpleProperty("server_risikoanalyse_begruendung", begruendung); } if (target.getTypeId().equals(SonstIT.TYPE_ID)) { target.setSimpleProperty("sonstit_risikoanalyse_begruendung", begruendung); } if (target.getTypeId().equals(TelefonKomponente.TYPE_ID)) { target.setSimpleProperty("tkkomponente_risikoanalyse_begruendung", begruendung); } } private void setRATrueFalse(CnATreeElement target, byte unj) { if (unj == GSDBConstants.UNJ_UNBEARBEITET) { return; } if (unj == GSDBConstants.UNJ_JA) { setRATrue(target); } else if (unj == GSDBConstants.UNJ_NEIN) { setRAFalse(target); } } private void setRATrue(CnATreeElement target) { if (target.getTypeId().equals(Raum.TYPE_ID)) { target.setSimpleProperty("raum_risikoanalyse", "raum_risikoanalyse_noetig"); } if (target.getTypeId().equals(Anwendung.TYPE_ID)) { target.setSimpleProperty("anwendung_risikoanalyse", "anwendung_risikoanalyse_noetig"); } if (target.getTypeId().equals(Client.TYPE_ID)) { target.setSimpleProperty("client_risikoanalyse", "client_risikoanalyse_noetig"); } if (target.getTypeId().equals(Gebaeude.TYPE_ID)) { target.setSimpleProperty("gebaeude_risikoanalyse", "gebaeude_risikoanalyse_noetig"); } if (target.getTypeId().equals(NetzKomponente.TYPE_ID)) { target.setSimpleProperty("nkkomponente_risikoanalyse", "nkkomponente_risikoanalyse_noetig"); } if (target.getTypeId().equals(Server.TYPE_ID)) { target.setSimpleProperty("server_risikoanalyse", "server_risikoanalyse_noetig"); } if (target.getTypeId().equals(SonstIT.TYPE_ID)) { target.setSimpleProperty("sonstit_risikoanalyse", "sonstit_risikoanalyse_noetig"); } if (target.getTypeId().equals(TelefonKomponente.TYPE_ID)) { target.setSimpleProperty("tkkomponente_risikoanalyse", "tkkomponente_risikoanalyse_noetig"); } } private void setRAFalse(CnATreeElement target) { if (target.getTypeId().equals(Raum.TYPE_ID)) { target.setSimpleProperty("raum_risikoanalyse", "raum_risikoanalyse_unnoetig"); } if (target.getTypeId().equals(Anwendung.TYPE_ID)) { target.setSimpleProperty("anwendung_risikoanalyse", "anwendung_risikoanalyse_unnoetig"); } if (target.getTypeId().equals(Client.TYPE_ID)) { target.setSimpleProperty("client_risikoanalyse", "client_risikoanalyse_unnoetig"); } if (target.getTypeId().equals(Gebaeude.TYPE_ID)) { target.setSimpleProperty("gebaeude_risikoanalyse", "gebaeude_risikoanalyse_unnoetig"); } if (target.getTypeId().equals(NetzKomponente.TYPE_ID)) { target.setSimpleProperty("nkkomponente_risikoanalyse", "nkkomponente_risikoanalyse_unnoetig"); } if (target.getTypeId().equals(Server.TYPE_ID)) { target.setSimpleProperty("server_risikoanalyse", "server_risikoanalyse_unnoetig"); } if (target.getTypeId().equals(SonstIT.TYPE_ID)) { target.setSimpleProperty("sonstit_risikoanalyse", "sonstit_risikoanalyse_unnoetig"); } if (target.getTypeId().equals(TelefonKomponente.TYPE_ID)) { target.setSimpleProperty("tkkomponente_risikoanalyse", "tkkomponente_risikoanalyse_unnoetig"); } } private void setEsaTrue(CnATreeElement target, byte besondererEinsatz, byte nichtModellierbar) { // one of the reasons has to be given, if not do nothing: if (besondererEinsatz == 0 && nichtModellierbar == 0) { return; } if (target.getTypeId().equals(Raum.TYPE_ID)) { target.setSimpleProperty("raum_ergaenzendeanalyse", "raum_ergaenzendeanalyse_modell"); } if (target.getTypeId().equals(Anwendung.TYPE_ID)) { target.setSimpleProperty("anwendung_ergaenzendeanalyse", "anwendung_ergaenzendeanalyse_modell"); } if (target.getTypeId().equals(Client.TYPE_ID)) { target.setSimpleProperty("client_ergaenzendeanalyse", "client_ergaenzendeanalyse_modell"); } if (target.getTypeId().equals(Gebaeude.TYPE_ID)) { target.setSimpleProperty("gebaeude_ergaenzendeanalyse", "gebaeude_ergaenzendeanalyse_modell"); } if (target.getTypeId().equals(NetzKomponente.TYPE_ID)) { target.setSimpleProperty("nkkomponente_ergaenzendeanalyse", "nkkomponente_ergaenzendeanalyse_modell"); } if (target.getTypeId().equals(Server.TYPE_ID)) { target.setSimpleProperty("server_ergaenzendeanalyse", "server_ergaenzendeanalyse_modell"); } if (target.getTypeId().equals(SonstIT.TYPE_ID)) { target.setSimpleProperty("sonstit_ergaenzendeanalyse", "sonstit_ergaenzendeanalyse_modell"); } if (target.getTypeId().equals(TelefonKomponente.TYPE_ID)) { target.setSimpleProperty("tkkomponente_ergaenzendeanalyse", "tkkomponente_ergaenzendeanalyse_modell"); } } /** * Transfer "gefaehrdungen" to existing "gefaehrdungsumsetzung" object in a * "risikoanalyse" parent. * * @param gefaehrdungen * @param risikoanalyse * @throws IOException * @throws SQLException */ public void transferRAGefaehrdungsUmsetzung(GefaehrdungsUmsetzung gefaehrdungsUmsetzung, RAGefaehrdungenResult ragResult) throws IOException { // gefhrdungsbewertung: // vollstndigkeit J/N // mechanismenstrke J/N // zuverlssigkeit J/N transferGefaehrdungsBewertung(gefaehrdungsUmsetzung, ragResult.getRzg().getMsUnjByZgVollstaUnjId(), ragResult.getRzg().getMsUnjByZgStaerkeUnjId(), ragResult.getRzg().getMsUnjByZgZuverlaUnjId()); transferGefaehrdungsBewertungTxt(gefaehrdungsUmsetzung, // vollst begr // mechan begr // zuverl begr ragResult.getRzg().getZgVollstaBegr(), ragResult.getRzg().getZgStaerkeBegr(), ragResult.getRzg().getZgZuverlaBegr(), // unterschrift liegt vor J/N ragResult.getRzg().getMsUnjByZgUnterUnjId(), // Risikobehandlung begrndung ragResult.getRzg().getZgRabBegr()); // these dates are currently not transferred // durchf. Von // ragResult.getRzg().getZgDatumVon(); // durchf. Bis // ragResult.getRzg().getZgDatumBis(); // risikobehandlung A-D gefaehrdungsUmsetzung.setAlternative(String.valueOf(ragResult.getRisikobehandlungABCD())); // ausreichender schutz J/N if (ragResult.getRzg().getMsUnjByZgOkUnjId().getUnjId() == GSDBConstants.UNJ_JA) { gefaehrdungsUmsetzung.setSimpleProperty("gefaehrdungsumsetzung_okay", "gefaehrdungsumsetzung_okay_yes"); } else if (ragResult.getRzg().getMsUnjByZgOkUnjId().getUnjId() == GSDBConstants.UNJ_NEIN) { gefaehrdungsUmsetzung.setSimpleProperty("gefaehrdungsumsetzung_okay", "gefaehrdungsumsetzung_okay_no"); } // we skip these: (from GSTOOL GUI, columns unknown, could be some of // the four listed below:) // entscheider (link person) // datum der entscheidung // // Ben.def.gs gefhrdung // -------------------- // nr // katalog // typ (bendef) RaZobGef.MyesnoByZgIndivYesId.yesId - wrong it's // apparently mbgef.userdef // bezeichnung // version // gef.txt String gefNr = translateGefaehrdungsNr(ragResult.getGefaehrdung()); gefaehrdungsUmsetzung.setSimpleProperty("gefaehrdungsumsetzung_id", gefNr); gefaehrdungsUmsetzung .setDescription(convertClobToStringEncodingSave(ragResult.getGefaehrdungTxt().getBeschreibung(), GSScraperUtil.getInstance().getModel().getEncoding())); gefaehrdungsUmsetzung.setTitel(ragResult.getGefaehrdungTxt().getName()); String url = transferUrl(ragResult.getGefaehrdung().getLink()); gefaehrdungsUmsetzung.setUrl(url); } private String transferUrl(String url) { String regex = "(\\\\.*\\\\.*\\\\)(.*)(\\.html)"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(url); if (matcher.find()) { url = matcher.group(2); } return url; } private void transferGefaehrdungsBewertungTxt(GefaehrdungsUmsetzung gefUms, String zgVollstaBegr, String zgStaerkeBegr, String zgZuverlaBegr, MsUnj unterschriftLiegtVor, String begruendungRisikobehandlung) { StringBuilder sb = new StringBuilder(); if (zgVollstaBegr != null && zgVollstaBegr.length() > 0) { sb.append("Bewertung ver Vollstndigkeit:\n"); sb.append(zgVollstaBegr); } if (zgStaerkeBegr != null && zgStaerkeBegr.length() > 0) { sb.append("\n\nBewertung der Mechanismenstrke:\n"); sb.append(zgStaerkeBegr); } if (zgZuverlaBegr != null && zgZuverlaBegr.length() > 0) { sb.append("\n\nBewertung der Zuverlssigkeit:\n"); sb.append(zgZuverlaBegr); } sb.append("\n\n"); if (unterschriftLiegtVor.getUnjId() == GSDBConstants.UNJ_JA) { sb.append("Unterschrift liegt vor.\n\n"); } if (unterschriftLiegtVor.getUnjId() == GSDBConstants.UNJ_NEIN) { sb.append("Unterschrift liegt nicht vor.\n\n"); } if (begruendungRisikobehandlung != null && begruendungRisikobehandlung.length() > 0) { sb.append("Begrndung der Risikobehandlung:\n" + begruendungRisikobehandlung); } sb.append("\n\n" + gefUms.getEntity().getSimpleValue("gefaehrdungsumsetzung_erlaeuterung")); gefUms.setSimpleProperty("gefaehrdungsumsetzung_erlaeuterung", sb.toString()); } private void transferGefaehrdungsBewertung(GefaehrdungsUmsetzung gefUms, MsUnj msUnjByZgVollstaUnjId, MsUnj msUnjByZgStaerkeUnjId, MsUnj msUnjByZgZuverlaUnjId) { if (msUnjByZgStaerkeUnjId.getUnjId() == GSDBConstants.UNJ_JA) { gefUms.setSimpleProperty("gefaehrdungsumsetzung_mechanismenstaerke", "gefaehrdungsumsetzung_mechanismenstaerke_ja"); } if (msUnjByZgStaerkeUnjId.getUnjId() == GSDBConstants.UNJ_NEIN) { gefUms.setSimpleProperty("gefaehrdungsumsetzung_mechanismenstaerke", "gefaehrdungsumsetzung_mechanismenstaerke_nein"); } if (msUnjByZgVollstaUnjId.getUnjId() == GSDBConstants.UNJ_JA) { gefUms.setSimpleProperty("gefaehrdungsumsetzung_vollstaendigkeit", "gefaehrdungsumsetzung_vollstaendigkeit_ja"); } if (msUnjByZgVollstaUnjId.getUnjId() == GSDBConstants.UNJ_NEIN) { gefUms.setSimpleProperty("gefaehrdungsumsetzung_vollstaendigkeit", "gefaehrdungsumsetzung_vollstaendigkeit_nein"); } if (msUnjByZgZuverlaUnjId.getUnjId() == GSDBConstants.UNJ_JA) { gefUms.setSimpleProperty("gefaehrdungsumsetzung_zuverlaessigkeit", "gefaehrdungsumsetzung_zuverlaessigkeit_ja"); } if (msUnjByZgZuverlaUnjId.getUnjId() == GSDBConstants.UNJ_NEIN) { gefUms.setSimpleProperty("gefaehrdungsumsetzung_zuverlaessigkeit", "gefaehrdungsumsetzung_zuverlaessigkeit_nein"); } } public boolean isUserDefGefaehrdung(MbGefaehr gefaehrdung) { return gefaehrdung.getUserdef() == GSDBConstants.USERDEF_YES; } /** * @param gefaehrdung * @return */ private String translateGefaehrdungsNr(MbGefaehr gefaehrdung) { // this is how the displayed "number" has to be determined: if (gefaehrdung.getUserdef() == GSDBConstants.USERDEF_YES) { return "bG " + gefaehrdung.getGfkId() + "." + gefaehrdung.getNr(); } else { return "G " + gefaehrdung.getGfkId() + "." + gefaehrdung.getNr(); } } public static String convertClobToStringEncodingSave(Clob clob, String encoding) throws IOException { try { Reader reader = clob.getCharacterStream(); InputStream in = new ByteArrayInputStream(IOUtils.toByteArray(reader, encoding)); if (in != null) { return InputUtil.streamToString(in, encoding); } else { return ""; } } catch (SQLException e) { LOG.error("Error while converting clob to String", e); throw new RuntimeException(e); } } /** * Transfer all data from one "massnahme" from gstool to existing * "gefaehrdung" underneath a risk analysis in verinice. * * @param result * @param gefaehrdung * @throws IOException * @throws SQLException */ public void transferRAGefaehrdungsMassnahmen(RAGefaehrdungsMassnahmenResult ragmResult, GefaehrdungsUmsetzung gefUms, MassnahmenUmsetzung massnahmenUmsetzung) throws SQLException, IOException { // Ben.def.gs massnahme // ------------------- // katalog // typ (bendef) // nr // bezeichnung // version // manahmentext String massnahmeNr = translateMassnahmenNr(ragmResult); massnahmenUmsetzung.setSimpleProperty("mnums_id", massnahmeNr); massnahmenUmsetzung.setName(ragmResult.getMassnahmeTxt().getName()); massnahmenUmsetzung .setDescription(convertClobToStringEncodingSave(ragmResult.getMassnahmeTxt().getBeschreibung(), GSScraperUtil.getInstance().getModel().getEncoding())); massnahmenUmsetzung.setErlaeuterung(ragmResult.getMzbm().getUmsBeschr()); massnahmenUmsetzung.setUrl(transferUrl(ragmResult.getMassnahme().getLink())); char siegel = convertToChar(ragmResult.getSiegelTxt().getKurzname()); if (siegel != KEIN_SIEGEL) { massnahmenUmsetzung.setStufe(siegel); } MassnahmenFactory massnahmenFactory = new MassnahmenFactory(); massnahmenUmsetzung = massnahmenFactory.transferUmsetzungWithDate(massnahmenUmsetzung, ragmResult.getUmsTxt().getName(), ragmResult.getMzbm().getUmsDatBis()); massnahmenUmsetzung = massnahmenFactory.transferRevision(massnahmenUmsetzung, ragmResult.getMzbm().getRevDat(), ragmResult.getMzbm().getRevDatNext(), ragmResult.getMzbm().getRevBeschr()); // may be necessary for user defined bausteine: // Massnahme-umsetzung // ------------------- // nr // bezeichnung // bautein nr (rB 99.10) // baustein name // prioritt // erforderlich ab A, b, c... // Umsetzung J,n,... // Lebenszyklusphase } /** * Convert ">G<", A, B, C, W, "-", "---" to a char * ">G<" is converted to G * * @param kurzname * @return */ private char convertToChar(String kurzname) { char result = KEIN_SIEGEL; if (kurzname != null && !kurzname.isEmpty()) { if (kurzname.length() > 1) { result = kurzname.toCharArray()[1]; } else { result = kurzname.toCharArray()[0]; } } return result; } public boolean isUserDefMassnahme(RAGefaehrdungsMassnahmenResult ragmResult) { return ragmResult.getMassnahme().getUserdef() == GSDBConstants.USERDEF_YES; } /** * @param ragmResult * @return */ private String translateMassnahmenNr(RAGefaehrdungsMassnahmenResult ragmResult) { if (ragmResult.getMassnahme().getUserdef() == GSDBConstants.USERDEF_YES) { return "bM " + ragmResult.getMassnahme().getMskId() + "." + ragmResult.getMassnahme().getNr(); } else { return "M " + ragmResult.getMassnahme().getMskId() + "." + ragmResult.getMassnahme().getNr(); } } private void typedTransfer(Anwendung element, ZielobjektTypeResult result) { element.setTitel(result.zielobjekt.getName()); element.setKuerzel(result.zielobjekt.getKuerzel()); element.setErlaeuterung(result.zielobjekt.getBeschreibung()); element.setAnzahl(result.zielobjekt.getAnzahl()); element.setVerarbeiteteInformationen(result.zielobjekt.getAnwBeschrInf()); element.setProzessBeschreibung(result.zielobjekt.getAnwInf2Beschr()); element.setProzessWichtigkeit(translateDringlichkeit(result.zielobjekt.getMbDringlichkeit())); element.setProzessWichtigkeitBegruendung(result.zielobjekt.getAnwInf1Beschr()); } private String translateDringlichkeit(MbDringlichkeit mbDringlichkeit) { if (mbDringlichkeit == null) { return ""; } if (dringlichkeiten == null) { dringlichkeiten = vampire.findDringlichkeitAll(); } if (drgMap == null) { drgMap = new HashMap<String, String>(); drgMap.put("untersttzend", Anwendung.PROP_PROZESSBEZUG_UNTERSTUETZEND); drgMap.put("wichtig", Anwendung.PROP_PROZESSBEZUG_WICHTIG); drgMap.put("wesentlich", Anwendung.PROP_PROZESSBEZUG_WESENTLICH); drgMap.put("hochgradig notwendig", Anwendung.PROP_PROZESSBEZUG_HOCHGRADIG); } MbDringlichkeitId drgId = mbDringlichkeit.getId(); String drgName = ""; for (MbDringlichkeitTxt dringlichkeit : dringlichkeiten) { if (dringlichkeit.getId().getSprId() == 1 && dringlichkeit.getId().equals(drgId)) { drgName = dringlichkeit.getName(); return drgMap.get(drgName); } } return ""; } private void typedTransfer(Client element, ZielobjektTypeResult result) { element.setTitel(result.zielobjekt.getName()); element.setKuerzel(result.zielobjekt.getKuerzel()); element.setErlaeuterung(result.zielobjekt.getBeschreibung()); element.setAnzahl(result.zielobjekt.getAnzahl()); } private void typedTransfer(Server element, ZielobjektTypeResult result) { element.setTitel(result.zielobjekt.getName()); element.setKuerzel(result.zielobjekt.getKuerzel()); element.setErlaeuterung(result.zielobjekt.getBeschreibung()); element.setAnzahl(result.zielobjekt.getAnzahl()); } private void typedTransfer(Person element, ZielobjektTypeResult result) { element.getEntity().setSimpleValue(element.getEntityType().getPropertyType(Person.P_NAME), result.zielobjekt.getName()); element.setKuerzel(result.zielobjekt.getKuerzel()); element.setErlaeuterung(result.zielobjekt.getBeschreibung()); element.setAnzahl(result.zielobjekt.getAnzahl()); element.getEntity().setSimpleValue(element.getEntityType().getPropertyType(Person.P_PHONE), result.zielobjekt.getTelefon()); element.getEntity().setSimpleValue(element.getEntityType().getPropertyType(Person.P_ORGEINHEIT), result.zielobjekt.getAbteilung()); if (importRollen) { List<MbRolleTxt> rollen = vampire.findRollenByZielobjekt(result.zielobjekt); for (MbRolleTxt rolle : rollen) { boolean success = element.addRole(rolle.getName()); if (!success) { Logger.getLogger(this.getClass()) .debug("Rolle konnte nicht bertragen werden: " + rolle.getName()); } else { Logger.getLogger(this.getClass()).debug( "Rolle bertragen: " + rolle.getName() + " fr Benutzer " + element.getTitle()); } } } } private void typedTransfer(TelefonKomponente element, ZielobjektTypeResult result) { element.setTitel(result.zielobjekt.getName()); element.setKuerzel(result.zielobjekt.getKuerzel()); element.setErlaeuterung(result.zielobjekt.getBeschreibung()); element.setAnzahl(result.zielobjekt.getAnzahl()); } private void typedTransfer(SonstIT element, ZielobjektTypeResult result) { element.setTitel(result.zielobjekt.getName()); element.setKuerzel(result.zielobjekt.getKuerzel()); element.setErlaeuterung(result.zielobjekt.getBeschreibung()); element.setAnzahl(result.zielobjekt.getAnzahl()); } private void typedTransfer(NetzKomponente element, ZielobjektTypeResult result) { element.setTitel(result.zielobjekt.getName()); element.setKuerzel(result.zielobjekt.getKuerzel()); element.setErlaeuterung(result.zielobjekt.getBeschreibung()); element.setAnzahl(result.zielobjekt.getAnzahl()); } private void typedTransfer(Gebaeude element, ZielobjektTypeResult result) { element.setTitel(result.zielobjekt.getName()); element.setKuerzel(result.zielobjekt.getKuerzel()); element.setErlaeuterung(result.zielobjekt.getBeschreibung()); element.setAnzahl(result.zielobjekt.getAnzahl()); } private void typedTransfer(Raum element, ZielobjektTypeResult result) { element.setTitel(result.zielobjekt.getName()); element.setKuerzel(result.zielobjekt.getKuerzel()); element.setErlaeuterung(result.zielobjekt.getBeschreibung()); element.setAnzahl(result.zielobjekt.getAnzahl()); } public int translateSchutzbedarf(String name) { if (name.equals("normal")) { return Schutzbedarf.NORMAL; } if (name.equals("hoch")) { return Schutzbedarf.HOCH; } if (name.equals("sehr hoch")) { return Schutzbedarf.SEHRHOCH; } return Schutzbedarf.UNDEF; } /** * @param importTask * @param searchResult * @return */ public Map<MbBaust, List<BausteineMassnahmenResult>> convertBausteinMap( List<BausteineMassnahmenResult> searchResult) { // convert list to map: of bausteine and corresponding massnahmen: Map<MbBaust, List<BausteineMassnahmenResult>> bausteineMassnahmenMap = new HashMap<MbBaust, List<BausteineMassnahmenResult>>(); for (BausteineMassnahmenResult result : searchResult) { List<BausteineMassnahmenResult> list = bausteineMassnahmenMap.get(result.baustein); if (list == null) { list = new ArrayList<BausteineMassnahmenResult>(); bausteineMassnahmenMap.put(result.baustein, list); } list.add(result); } return bausteineMassnahmenMap; } /** * Convert searchResult to map of baustein : list of massnahmen with notes * * @param notesResults */ public Map<MbBaust, List<NotizenMassnahmeResult>> convertZielobjektNotizenMap( List<NotizenMassnahmeResult> searchResult) { Map<MbBaust, List<NotizenMassnahmeResult>> bausteineMassnahmenMap = new HashMap<MbBaust, List<NotizenMassnahmeResult>>(); for (NotizenMassnahmeResult result : searchResult) { List<NotizenMassnahmeResult> list = bausteineMassnahmenMap.get(result.baustein); if (list == null) { list = new ArrayList<NotizenMassnahmeResult>(); bausteineMassnahmenMap.put(result.baustein, list); } list.add(result); } return bausteineMassnahmenMap; } public static String getId(MbBaust mbBaust) { Pattern pattern = Pattern.compile("(\\d+)\\.0*(\\d+)"); Matcher match = pattern.matcher(mbBaust.getNr()); if (match.matches()) { return "B " + match.group(1) + "." + Integer.parseInt(match.group(2)); } // TODO AK if none found return ben.def.baustein number return ""; } public static BausteineMassnahmenResult findMassnahmenVorlageBaustein(MassnahmenUmsetzung massnahmenUmsetzung, List<BausteineMassnahmenResult> list) { for (BausteineMassnahmenResult result : list) { if (massnahmenUmsetzung.getKapitelValue()[0] == result.massnahme.getMskId() && massnahmenUmsetzung.getKapitelValue()[1] == result.massnahme.getNr()) { return result; } } return null; } /** * @param mnums * @param massnahmenNotizen */ public static List<NotizenMassnahmeResult> findMassnahmenVorlageNotiz(MassnahmenUmsetzung massnahmenUmsetzung, List<NotizenMassnahmeResult> list) { List<NotizenMassnahmeResult> resultList = new ArrayList<NotizenMassnahmeResult>(); for (NotizenMassnahmeResult result : list) { if (result.massnahme != null && massnahmenUmsetzung.getKapitelValue()[0] == result.massnahme.getMskId() && massnahmenUmsetzung.getKapitelValue()[1] == result.massnahme.getNr()) { resultList.add(result); } } return resultList; } public static String convertRtf(String notizText) throws IOException, BadLocationException { StringReader reader = new StringReader(notizText); RTFEditorKit kit = new RTFEditorKit(); Document document = kit.createDefaultDocument(); kit.read(reader, document, 0); // return plaintext return document.getText(0, document.getLength()); } /** * Find notes that are connected to a baustein directly. * * @param bstUms * @param massnahmenNotizen * @return */ public static List<NotizenMassnahmeResult> findBausteinVorlageNotiz(BausteinUmsetzung bstUms, List<NotizenMassnahmeResult> list) { List<NotizenMassnahmeResult> resultList = new ArrayList<NotizenMassnahmeResult>(); for (NotizenMassnahmeResult result : list) { if (result.massnahme == null) { Integer refZobId = result.zoBst.getRefZobId(); boolean stop = refZobId != null; resultList.add(result); } } return resultList; } /** * @param ownGefaehrdung * @param ragResult * @throws IOException * @throws SQLException */ public void transferOwnGefaehrdung(OwnGefaehrdung ownGefaehrdung, RAGefaehrdungenResult ragResult) throws SQLException, IOException { String gefNr = translateGefaehrdungsNr(ragResult.getGefaehrdung()); ownGefaehrdung.setId(gefNr); ownGefaehrdung.setTitel(ragResult.getGefaehrdungTxt().getName()); ownGefaehrdung .setBeschreibung(convertClobToStringEncodingSave(ragResult.getGefaehrdungTxt().getBeschreibung(), GSScraperUtil.getInstance().getModel().getEncoding())); } public static String createBausteineMassnahmenResultIdentifier( BausteineMassnahmenResult bausteineMassnahmenResult) { StringBuilder sb = new StringBuilder(); sb.append(bausteineMassnahmenResult.baustein.getId().getBauId()); sb.append(bausteineMassnahmenResult.massnahme.getId().getMasId()); sb.append(bausteineMassnahmenResult.obm.hashCode()); sb.append(bausteineMassnahmenResult.umstxt.getId()); sb.append(bausteineMassnahmenResult.zoBst.getId().hashCode()); return sb.toString(); } }