Vaadin : Use a custom converter on grid

Here a simple Vaadin converter to format dateTime in GRID.
ConvertToModel method is not implemented because converter is not associated to any field.

How to use Grid

  CustomFormatDateStringConverter dateConverter = new CustomFormatDateStringConverter();
  grid.getColumn("beanDateAttr").setConverter(dateConverter);

Converter Implementation

package com.common.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

import com.vaadin.data.util.converter.Converter;

public class CustomFormatDateStringConverter implements Converter<String, String> {
	SimpleDateFormat dateParser = new SimpleDateFormat("ddMMyyyy");
	SimpleDateFormat dateFormatter = new SimpleDateFormat("dd/MM/yyyy");

	@Override
	public String convertToModel(String value,
			Class<? extends String> targetType, Locale locale)
			throws com.vaadin.data.util.converter.Converter.ConversionException {
			
			// If using in a grid this part can be omitted
			
			return value;
	}

	@Override
	public String convertToPresentation(String value,
			Class<? extends String> targetType, Locale locale)
			throws com.vaadin.data.util.converter.Converter.ConversionException {
			
			if (value!=null && !value.isEmpty()) {
				try {
					Date date = dateParser.parse(value);
					value = dateFormatter.format(date);
				} catch (ParseException e) {
					e.printStackTrace();

				}
			}else{
				value="";
			}
			return value;
	}

	@Override
	public Class<String> getModelType() {
		return String.class;
	}

	@Override
	public Class<String> getPresentationType() {
		return String.class;
	}

}

Configure Jrebel with remote server

After 3 hours turning around over many examples, finally I’ve configured Jrebel with remote webpshere portal.
This is my step by step configuration guide:

-) Step 1 : download the client from this url :

https://zeroturnaround.com/software/jrebel/download/prev-releases/

-) Step 2 : copy and unpack downloaded file on the remote server (I usually use: C:\IBM\jrebel\)

-) Step 3 : Activate client using a valid licence (I’ve used activate script in client’s bin directory)

-) Step 4 : Generate bootstrap file using this command (Don’t forget to use websphere portal jvm ):

cd C:\IBM\jrebel

C:\IBM\WebSphere\AppServer\java\jre\bin\java -jar jrebel.jar

-) Step 5 : Copy jrebel-bootstrap.jar from [userHome]/.jrebel to C:\IBM\jrebel\

-) Step 6 : Add jrebel parameter to websphere portal jvm (if you don’t know how visit this : http://www-01.ibm.com/support/docview.wss?uid=swg21417365) :

-Xshareclasses:none -Xbootclasspath/p:C:\IBM\jrebel\jrebel-bootstrap.jar;C:\IBM\jrebel\jrebel.jar -Drebel.remoting_plugin=true 

finally my configuration seems like this:

-Xshareclasses:none -Xbootclasspath/p:C:\IBM\jrebel\jrebel-bootstrap.jar;C:\IBM\jrebel\jrebel.jar -Drebel.remoting_plugin=true ${WPS_JVM_ARGUMENTS_EXT} -Dderby.system.home=${USER_INSTALL_ROOT}/PortalServer/derby -Dibm.stream.nio=true -Djava.io.tmpdir=${WAS_TEMP_DIR} -Xdump:stack:events=allocation,filter=#10m -Xgcpolicy:gencon -verbose:gc -Xverbosegclog:${SERVER_LOG_ROOT}/verbosegc.%Y%m%d.%H%M%S.%pid.txt,20,10000

-) Step 7 : Finally don’t foget generate password using this command:

cd C:\IBM\jrebel

C:\IBM\WebSphere\AppServer\java\jre\bin\java -jar jrebel.jar -set-remote-password password

How to split String in words and populate an array

Here a simply method to split a string in words and generate an array.
In this case I use a Length param to limit substring size.

 


...

public static String[] splitStringInWordsAndCreateArrayWithLineInSize(String input,Integer lineLength){
		String[] words = input.split(" ");
 		List<String> list = new ArrayList<String>();
 		StringBuilder line = new StringBuilder();
 		for (int x = 0; x < words.length; x++) {
 			
 			
 			Boolean c = ((line.toString()+words[x]+" ").length()<lineLength);
 			if(c){
 				line.append(words[x]).append(" ");
 			}else{
 				list.add(line.toString());
 				line = new StringBuilder(words[x]).append(" ");
 			}
 		}
 		if(line.toString().length()>0){
 			list.add(line.toString());	
 		}
 		
 		Object[] arrObj = list.toArray();
 		String[] arrString = Arrays.copyOf(arrObj, arrObj.length, String[].class);
 		
		return arrString;
	}

...

And here unit test:


...

@Test
	 	public void testSplitStringInWordsAndCreateArrayWithLineInSize(){
	 		String s = "Prodotti tricologici per la cura e la bellezza dei capelli,quali shampoo, lozioni per capelli, preparati per ondulare icapelli, preparati per effettuare la permanente dei capelli,tinture per capelli, gel per capelli, lacche e fissatori percapelli,preparati per ravvivare il colore dei capelli . ";
	 		Integer lineLength = 62;
	 		String[] out = FYStringUtils.splitStringInWordsAndCreateArrayWithLineInSize(s, lineLength);
	 		StringBuilder rebuild = new StringBuilder();
	 		for(int x=0;x<out.length;x++){
	 			//System.out.println("x-"+out[x]);
	 			assertThat(out.length<lineLength).isTrue();
	 			rebuild.append(out[x]);
	 		}
	 		
	 		
	 		assertThat(rebuild.toString()).isEqualTo(s);
	 		
	 	}

...

Websphere 8 with war java.lang.NoSuchMethodError Exception

Using a war under websphere 8.0 can sometimes throw this exception (In my specific case with jtopen libs) solved with the screen configuration:

war-config

 

 

 

 

 

 

 

ServletWrappe E com.ibm.ws.webcontainer.servlet.ServletWrapper service Uncaught service() exception thrown by servlet main: java.lang.NoSuchMethodError: com/ibm/as400/data/ProgramCallDocument.__jr_selector__(I[Ljava/lang/Object;)Ljava/lang/Object;
at com.fakeclass.genericinvokerweb.beprogram.BEProgram.output(BEProgram.java:217)
at com.fakeclass.genericinvokerweb.PCMLutils.buildOutPut(PCMLutils.java:128)
at com.fakeclass.genericinvokerweb.MainServlet.executeCallAs400(MainServlet.java:104)
at com.fakeclass.genericinvokerweb.MainServlet.doPost(MainServlet.java:86)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:595)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1230)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:779)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:478)
at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1071)
at com.ibm.ws.webcontainer.webapp.WebApp.__handleRequest(WebApp.java:3815)
at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java)
at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:304)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:981)
at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1662)
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:200)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:453)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:515)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:306)
at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:84)
at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:175)
at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1702)

[17/03/16 16.41.28:730 CET] 00000050 SystemErr R 17-mar-2016 16.41.28 com.ibm.ws.webcontainer.servlet.ServletWrapper service
SEVERE: Uncaught service() exception thrown by servlet main: java.lang.NoSuchMethodError: com/ibm/as400/data/ProgramCallDocument.__jr_selector__(I[Ljava/lang/Object;)Ljava/lang/Object;
at com.fakeclass.genericinvokerweb.beprogram.BEProgram.output(BEProgram.java:217)
at com.fakeclass.genericinvokerweb.PCMLutils.buildOutPut(PCMLutils.java:128)
at com.fakeclass.genericinvokerweb.MainServlet.executeCallAs400(MainServlet.java:104)
at com.fakeclass.genericinvokerweb.MainServlet.doPost(MainServlet.java:86)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:595)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1230)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:779)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:478)
at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1071)
at com.ibm.ws.webcontainer.webapp.WebApp.__handleRequest(WebApp.java:3815)
at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java)
at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:304)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:981)
at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1662)
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:200)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:453)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:515)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:306)
at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:84)
at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:175)
at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1702)