Java tutorial
/******************************************************************************* * Copyright (c) 2016 Obeo. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Obeo - initial API and implementation * *******************************************************************************/ package org.obeonetwork.m2doc.util; import java.io.IOException; import java.util.HashMap; import java.util.Map; import org.apache.poi.xwpf.usermodel.IRunBody; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.Status; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; import org.eclipse.emf.ecore.xmi.XMLResource; import org.obeonetwork.m2doc.M2DocPlugin; import org.obeonetwork.m2doc.parser.TemplateValidationMessage; import org.obeonetwork.m2doc.parser.ValidationMessageLevel; import org.obeonetwork.m2doc.template.AbstractConstruct; /** * Util class for M2Doc. * * @author <a href="mailto:nathalie.lepine@obeo.fr">Nathalie Lepine</a> */ public final class M2DocUtils { /** * constant defining the color of info messages. */ public static final String INFO_COLOR = "0000FF"; /** * constant defining the color of warning messages. */ public static final String WARNING_COLOR = "FFFF00"; /** * constant defining the color of error messages. */ public static final String ERROR_COLOR = "FF0000"; /** * Docx extension file. */ public static final String DOCX_EXTENSION_FILE = "docx"; /** * Constructor. */ private M2DocUtils() { super(); } /** * Save the contents of the resource to the file system. * * @param resource * Resource * @throws IOException */ public static void saveResource(Resource resource) { Map<Object, Object> options = new HashMap<Object, Object>(); options.put(XMLResource.OPTION_ENCODING, "UTF-8"); try { resource.save(options); } catch (IOException exception) { M2DocPlugin.getDefault().getLog().log(new Status(Status.ERROR, M2DocPlugin.PLUGIN_ID, Status.ERROR, exception.getMessage(), exception)); } } /** * Create resource. * * @param templateFile * IFile * @param genConfURI * URI * @return new resource. */ public static Resource createResource(IFile templateFile, URI genConfURI) { // Create a resource set ResourceSet resourceSet = new ResourceSetImpl(); // Create a resource for this file. Resource resource = resourceSet.createResource(genConfURI); return resource; } /** * Appends the given error message at the end of the given {@link XWPFParagraph}. * * @param paragraph * the {@link XWPFParagraph} * @param level * the {@link ValidationMessageLevel} * @param message * the message * @return the created {@link XWPFRun} */ public static XWPFRun appendMessageRun(XWPFParagraph paragraph, ValidationMessageLevel level, String message) { final XWPFRun res = paragraph.createRun(); setRunMessage(res, level, message); return res; } /** * Inserts a new message {@link XWPFRun} after the given {@link XWPFRun}. * * @param run * the {@link XWPFRun} used as reference. * @param level * the {@link ValidationMessageLevel} * @param message * the message * @return the created {@link XWPFRun} */ public static XWPFRun insertMessageAfter(XWPFRun run, ValidationMessageLevel level, String message) { final XWPFRun res; final IRunBody parent = run.getParent(); if (parent instanceof XWPFParagraph) { final XWPFParagraph paragraph = (XWPFParagraph) parent; res = paragraph.insertNewRun(paragraph.getRuns().indexOf(run)); setRunMessage(res, level, message); } else { throw new IllegalStateException("this should not happend"); } return res; } /** * Set the given message to the given {@link XWPFRun}. * * @param run * the {@link XWPFRun} * @param level * the {@link ValidationMessageLevel} * @param message * the message */ public static void setRunMessage(XWPFRun run, ValidationMessageLevel level, String message) { run.setText(message); run.setBold(true); run.setColor(getColor(level)); } /** * Gets the color to use for the given {@link ValidationMessageLevel}. * * @param level * the {@link ValidationMessageLevel} * @return the color to use for the given {@link ValidationMessageLevel} */ public static String getColor(ValidationMessageLevel level) { final String res; switch (level) { case INFO: res = M2DocUtils.INFO_COLOR; break; case WARNING: res = M2DocUtils.WARNING_COLOR; break; case ERROR: res = M2DocUtils.ERROR_COLOR; break; default: res = M2DocUtils.INFO_COLOR; break; } return res; } /** * Add a validation error message to a given {@link AbstractConstruct}'s last run. * * @param construct * The construct in which to 'log' the message * @param msg * THe message to log */ public static void validationError(AbstractConstruct construct, String msg) { XWPFRun lastRun = construct.getRuns().get(construct.getRuns().size() - 1); construct.getValidationMessages() .add(new TemplateValidationMessage(ValidationMessageLevel.ERROR, msg, lastRun)); } }