Monday, July 22, 2013

23-Event-Handling-in-Spring

DrawingApp.java
package org.yash.watertechsol;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;


public class DrawingApp {
                public static void main(String[] args){
                                AbstractApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
                                Shape shape = (Shape)context.getBean("circle");
                                shape.draw();
                               
                                /* Params: String code, args-to send dynamic values, locale*/
                                System.out.println(context.getMessage("greeting", null, "Default Greeting", null));
                }
}

Point.java
package org.yash.watertechsol;

public class Point {
      private int x;
      private int y;
     
      public int getX() {
            return x;
      }
      public void setX(int x) {
            this.x = x;
      }
      public int getY() {
            return y;
      }
      public void setY(int y) {
            this.y = y;
      }
}

Triangle.java
package org.yash.watertechsol;


public class Triangle implements Shape{
     
      private Point pointA;
      private Point pointB;
      private Point pointC;
     
      public Point getPointA() {
            return pointA;
      }

      public void setPointA(Point pointA) {
            this.pointA = pointA;
      }

      public Point getPointB() {
            return pointB;
      }

      public void setPointB(Point pointB) {
            this.pointB = pointB;
      }

      public Point getPointC() {
            return pointC;
      }

      public void setPointC(Point pointC) {
            this.pointC = pointC;
      }

      public void draw(){
            System.out.println("Drawing Triangle");
            System.out.println("Point A = (" + getPointA().getX()+", "+getPointA().getY()+")");
            System.out.println("Point B = (" + getPointB().getX()+", "+getPointB().getY()+")");
            System.out.println("Point C = (" + getPointC().getX()+", "+getPointC().getY()+")");
      }

}

spring.xml
<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-3.0.xsd">
           
      <!--
      <bean id="triangle" class="org.yash.watertechsol.Triangle">
            <property name="pointA" ref="pointA"></property>
            <property name="pointB" ref="pointB"></property>
            <property name="pointC" ref="pointC"></property>
      </bean>
      -->

      <!--
      <bean id="circle" class="org.yash.watertechsol.Circle">
            <property name="messageSource" ref="messageSource"></property>
      </bean>
       -->
     
      <bean id ="pointA" class="org.yash.watertechsol.Point">
            <property name="x" value="0" />
            <property name="y" value="0" />
      </bean>
     
      <bean id ="pointB" class="org.yash.watertechsol.Point">
            <property name="x" value="-20" />
            <property name="y" value="0" />
      </bean>

      <bean id ="pointC" class="org.yash.watertechsol.Point">
            <property name="x" value="0" />
            <property name="y" value="20" />
      </bean>

      <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
            <property name="basenames">
                        <value>messages</value>
            </property>
      </bean>
     
      <context:annotation-config />
      <context:component-scan base-package="org.yash.watertechsol"></context:component-scan>

</beans>

Shape.java
package org.yash.watertechsol;

public interface Shape {
      public void draw();
}

Circle.java
package org.yash.watertechsol;

import java.util.Locale;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;
import javax.annotation.processing.Messager;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationEventPublisherAware;
import org.springframework.context.MessageSource;
import org.springframework.stereotype.Component;

@Component
public class Circle implements Shape, ApplicationEventPublisherAware {

                private Point center;
                private ApplicationEventPublisher publisher;
               
                @Autowired
                private MessageSource messageSource;

                @Override
                public void draw() {
                                //System.out.println(this.messageSource.getMessage("drawing.circle", null, "Default circle", null));
                                System.out.println(this.messageSource.getMessage("drawing.point", new Object[]{center.getX(),center.getY()}, "Default point message", Locale.ENGLISH));
                                //System.out.println("Circle: ("+center.getX()+", "+center.getY()+")");
                                //System.out.println(this.messageSource.getMessage("greeting", null, "Default Greeting", null));
                                DrawEvent drawEvent = new DrawEvent(this);
                                publisher.publishEvent(drawEvent);
                }
               
                public Point getCenter() {
                                return center;
                }
               
                @Resource(name="pointC")
                public void setCenter(Point center) {
                                this.center = center;
                }
               

                public void setMessageSource(MessageSource messageSource) {
                                this.messageSource = messageSource;
                }

                public MessageSource getMessageSource() {
                                return messageSource;
                }

                @Override
                public void setApplicationEventPublisher(ApplicationEventPublisher publisher) {
                                this.publisher = publisher;                          
                }
}

MyEventListener.java
package org.yash.watertechsol;

import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;

@Component
public class MyEventListener implements ApplicationListener {

      @Override
      public void onApplicationEvent(ApplicationEvent event) {
            System.out.println(event.toString());          
      }

      public String toString(){
            return "Draw event occured";
      }
}

DrawEvent.java
package org.yash.watertechsol;

import org.springframework.context.ApplicationEvent;

public class DrawEvent extends ApplicationEvent{

      public DrawEvent(Object source) {
            super(source);
            // TODO Auto-generated constructor stub
      }


}

No comments:

Post a Comment