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.Date; import java.util.Iterator; import java.util.Properties; import javax.servlet.http.HttpServletResponse; import com.processpuzzle.application.control.control.CommandDispatcher; import com.processpuzzle.application.security.control.LoggedUserLocator; import com.processpuzzle.artifact.domain.Comment; import com.processpuzzle.artifact.domain.CommentList; import com.processpuzzle.artifact.domain.DefaultArtifactRepository; import com.processpuzzle.fundamental_types.domain.TimePoint; import com.processpuzzle.party.domain.PartyRepository; import com.processpuzzle.party.domain.Person; import com.processpuzzle.persistence.domain.DefaultUnitOfWork; public class SaveCommentCommand extends ArtifactCommand { protected CommentList commentList; public void init( CommandDispatcher dispatcher ) { super.init( dispatcher ); boolean ccerror = false; try{ commentList = (CommentList) subjectArtifact; }catch( ClassCastException e ){ ccerror = true; } if( ccerror || commentList == null ) throw new InvalidParameterException( "SaveComment: Wrong ID!" ); setUpResponse( dispatcher.getResponse() ); } public String getName() { return "SaveComment"; } public String execute( CommandDispatcher dispatcher ) throws Exception { Properties properties = dispatcher.getProperties(); PartyRepository partyRepository = (PartyRepository) applicationContext.getRepository( PartyRepository.class ); DefaultArtifactRepository artifactRepository = (DefaultArtifactRepository) applicationContext.getRepository( DefaultArtifactRepository.class ); DefaultUnitOfWork work = new DefaultUnitOfWork( true ); boolean modified = false; Iterator<?> htmlTexts = commentList.getComments().iterator(); while( htmlTexts.hasNext() ){ Comment comment = (Comment) htmlTexts.next(); if( comment.getDivId() == null || (comment.getDivId() != null && comment.getDivId().equals( "" )) ){ comment.setDivId( commentList.getGeneratedDivId() ); modified = true; } String htmlText = properties.getProperty( comment.getDivId() ); if( htmlText != null && !htmlText.equals( comment.getText() ) ){ comment.setText( htmlText ); modified = true; } } String newText = properties.getProperty( "newDivId" ); if( newText != null ){ String generatedId = commentList.getGeneratedDivId(); Person loggedUser = LoggedUserLocator.locate( dispatcher ); Comment newComment = new Comment( loggedUser, null, newText ); newComment.setDivId( generatedId ); Date now = Calendar.getInstance().getTime(); newComment.setCreationTimeStamp( now ); newComment.setCreationDate( new TimePoint( now ) ); commentList.appendComment( newComment ); addLineToResponse( "<divId>" + generatedId + "</divId>", dispatcher.getResponse() ); modified = true; } if( modified ) artifactRepository.update( work, commentList ); work.finish(); return ""; } 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 ){} } public void addLineToResponse( String line, HttpServletResponse response ) { try{ PrintWriter printWritter = response.getWriter(); printWritter.println( line ); }catch( IOException e ){} } protected void retrieveRequestParameters( CommandDispatcher dispatcher ) {} protected void retrieveResponseDocument() {} }