package com.processpuzzle.artifact_management.control; import java.io.IOException; import java.io.PrintWriter; import java.security.InvalidParameterException; import java.util.Calendar; import java.util.Iterator; import java.util.Properties; import java.util.Random; import java.util.Set; import javax.servlet.http.HttpServletResponse; import com.processpuzzle.application.control.control.CommandDispatcher; import com.processpuzzle.artifact.domain.EditableHTMLDocument; import com.processpuzzle.artifact.domain.EditableHTMLDocumentRepository; import com.processpuzzle.artifact.domain.HTMLText; import com.processpuzzle.party.domain.PartyRepository; import com.processpuzzle.persistence.domain.DefaultUnitOfWork; public class SaveHTMLTextCommand extends SaveArtifactCommand { private EditableHTMLDocument eHTMLDoc; public void init( CommandDispatcher dispatcher ) { super.init( dispatcher ); boolean ccerror = false; try{ eHTMLDoc = (EditableHTMLDocument) subjectArtifact; }catch( ClassCastException e ){ ccerror = true; } if( ccerror || eHTMLDoc == null ) throw new InvalidParameterException( "SaveHTMLText: Wrong ID!" ); setUpResponse( dispatcher.getResponse() ); } public String getName() { return "SaveHTMLText"; } public String execute( CommandDispatcher dispatcher ) throws Exception { Properties properties = dispatcher.getProperties(); PartyRepository partyRepository = (PartyRepository) applicationContext.getRepository( PartyRepository.class ); EditableHTMLDocumentRepository htmlDocumentRepository = applicationContext.getRepository( EditableHTMLDocumentRepository.class ); DefaultUnitOfWork work = new DefaultUnitOfWork( true ); boolean modified = false; Iterator<HTMLText> htmlTexts = eHTMLDoc.getHtmlTexts().iterator(); while( htmlTexts.hasNext() ){ HTMLText aHTMLText = (HTMLText) htmlTexts.next(); String htmlText = properties.getProperty( aHTMLText.getDivId() ); if( htmlText != null && !htmlText.equals( aHTMLText.getText() ) ){ aHTMLText.setText( htmlText ); modified = true; } } String newText = properties.getProperty( "newDivId" ); if( newText != null ){ Random rnd = new Random(); String generatedId; while( existsDivId( generatedId = "editorDiv" + rnd.nextInt( 1000 ), eHTMLDoc.getHtmlTexts() ) ) ; HTMLText newHTMLText = new HTMLText( generatedId, newText ); newHTMLText.setCreationTimeStamp( Calendar.getInstance().getTime() ); eHTMLDoc.getHtmlTexts().add( newHTMLText ); addLineToResponse( "<divId>" + generatedId + "</divId>", dispatcher.getResponse() ); modified = true; } if( modified ) htmlDocumentRepository.updateEditableHTMLDocument( work, eHTMLDoc ); work.finish(); return ""; } private boolean existsDivId( String divId, Set<HTMLText> htmlTexts ) { if( divId == null ) return false; Iterator<HTMLText> hts = htmlTexts.iterator(); while( hts.hasNext() ){ HTMLText aHTMLText = (HTMLText) hts.next(); if( divId.equals( aHTMLText.getDivId() ) ) return false; } return false; } private void setUpResponse( HttpServletResponse response ) { response.setContentType( "text/xml" ); response.setCharacterEncoding( "UTF-8" ); response.setHeader( "Cache-Control", "no-cache" ); try{ PrintWriter responseWriter = response.getWriter(); responseWriter.println( "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" ); }catch( IOException e ){} } private void addLineToResponse( String line, HttpServletResponse response ) { try{ PrintWriter printWritter = response.getWriter(); printWritter.println( line ); }catch( IOException e ){} } }