/** * */ package de.urszeidler.shr5.webserver; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Map; import javax.servlet.MultipartConfigElement; import javax.servlet.Servlet; import javax.servlet.ServletException; import javax.servlet.annotation.MultipartConfig; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.Part; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.impl.ResourceFactoryImpl; import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl; import org.eclipse.jetty.server.Request; import de.urszeidler.eclipse.shr5Management.CharacterGroup; import de.urszeidler.eclipse.shr5Management.GamemasterManagement; import de.urszeidler.eclipse.shr5Management.ManagedCharacter; import de.urszeidler.eclipse.shr5Management.Shr5managementFactory; import de.urszeidler.shr5.ecp.service.ScriptService; import de.urszeidler.shr5.ecp.util.ShadowrunEditingTools; import de.urszeidler.shr5.scripting.Script; /** * @author urs */ @MultipartConfig(maxFileSize = 3145728, fileSizeThreshold = 3145728) public class CharacterUploadServlet extends HttpServlet implements Servlet { private static final long serialVersionUID = 2038846225859990462L; private static final MultipartConfigElement MULTI_PART_CONFIG = new MultipartConfigElement(System.getProperty("java.io.tmpdir")); protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { if (request.getContentType() != null && request.getContentType().startsWith("multipart/form-data")) { request.setAttribute(Request.__MULTIPART_CONFIG_ELEMENT, MULTI_PART_CONFIG); } // String description = request.getParameter("description"); // Retrieves <input type="text" name="description"> Part filePart = request.getPart("file"); // Retrieves <input type="file" name="file"> // String filename = getFilename(filePart); try { InputStream filecontent = filePart.getInputStream(); ResourceFactoryImpl resourceFactoryImpl = new XMIResourceFactoryImpl(); URI uri = URI.createPlatformResourceURI("shr5Resource/temp.xmi", true); Resource resource = resourceFactoryImpl.createResource(uri); Map<?, ?> options = new HashMap<Object, Object>(); resource.load(filecontent, options); EObject eObject = resource.getContents().get(0); if (eObject instanceof ManagedCharacter) { ManagedCharacter mc = (ManagedCharacter)eObject; ScriptService scriptService = Activator.getDefault().getScriptService(); Script script = scriptService.getCurrentScript(); if (script != null) { GamemasterManagement management = script.getManagement(); if (management == null) { management = Shr5managementFactory.eINSTANCE.createGamemasterManagement(); script.setManagement(management); } EList<CharacterGroup> groups = management.getGroups(); if (groups.size() == 0) { CharacterGroup characterGroup = Shr5managementFactory.eINSTANCE.createCharacterGroup(); characterGroup.setName("import"); groups.add(characterGroup); } CharacterGroup characterGroup = groups.get(0); characterGroup.getMembers().add(mc); script.getPlayer().getMembers().add(ShadowrunEditingTools.managedCharacter2RuntimeFunction().apply(mc)); scriptService.setPlacement(script.getHistory().getCurrentPlacement()); } } resource.unload(); } finally { } response.sendRedirect("main.jsp"); } // private static String getFilename(Part part) { // for (String cd : part.getHeader("content-disposition").split(";")) { // if (cd.trim().startsWith("filename")) { // String filename = cd.substring(cd.indexOf('=') + 1).trim().replace("\"", ""); // return filename.substring(filename.lastIndexOf('/') + 1).substring(filename.lastIndexOf('\\') + 1); // MSIE fix. // } // } // return null; // } }