Wiki

Imprimir Propiedades
Bookshop_presentation

The presentation is defined in Romulus using POJO's that are interpreted by the application server and shown in the form of web pages. Therefore, no HTML is needed in this step, and all presentation will be defined using Java.

The first step is to create some CRUD classes by using the Roma console:

$ roma crud example.bookshop.domain.Author
$ roma crud example.bookshop.domain.Book
$ roma crud example.bookshop.domain.Magazine
$ roma crud example.bookshop.domain.Order
$ roma crud example.bookshop.domain.Product

If you refresh the Eclipse project, you'll observe that the generated classes are under example.bookshop.view.domain.author, example.bookshop.view.domain.book, example.bookshop.view.domain.magazine, example.bookshop.view.domain.order and example.bookshop.view.domain.product, respectively. These classes will serve to implement a view in which objects can be created, read, updated and deleted.

In order to show a back button in all of these CRUD's, a trick will be used by defining a superclass for all of them. This new class will be called BookshopCRUDMain.java:

BookshopCRUDMain.java:

package example.bookshop.view.domain;

import org.romaframework.core.entity.ComposedEntityInstance;
import org.romaframework.core.flow.ObjectContext;
import org.romaframework.module.crud.CRUDMain;

public abstract class BookshopCRUDMain<T extends ComposedEntityInstance<?>>
        extends CRUDMain<T> {
    public BookshopCRUDMain(Class<T> arg0, Class<?> arg1, Class<?> arg2,
            Class<?> arg3) {
        super(arg0, arg1, arg2, arg3);
    }

    public void back() {
        ObjectContext.getInstance().show(getBackObject());
    }
}

Now, AuthorMain.java, BookMain.java, MagazineMain.java, OrderMain.java and ProductMain.java should be changed in order to inherit BookshopCRUDMain.

The next step is defining users' main pages:
 - HomePage.java: This page will be used by and administrator to create new users that can log into the system.
 - HomePageBuyer.java: This page will allow buyers to create orders with books and magazines.
 - HomePageClient.java: This page will show clients a list of products, which can be added to their carts, and a button to check out. Notice how the Cart object is retrieved from the session data.
 - HomePageWarehouseEmployee.java: This page will show warehouse employees a set of orders which they can accept or reject.

HomePage.java:

package example.bookshop.view.domain;
 
import org.romaframework.aspect.flow.annotation.FlowAction;
import org.romaframework.aspect.view.annotation.ViewClass;
import org.romaframework.aspect.view.screen.Screen;
import org.romaframework.aspect.view.screen.config.ScreenManager;
import org.romaframework.core.flow.ObjectContext;
import org.romaframework.module.users.view.domain.baseaccount.BaseAccountMain;
 
@ViewClass(layout = "screen://body")
public class HomePage {
 
  public HomePage() {
        Screen screen = ObjectContext.getInstance().getComponent(ScreenManager.class).getScreen("main-screen.xml");
        ObjectContext.getInstance().setScreen(screen);
  }
 
  @FlowAction(next=BaseAccountMain.class)
  public void users() {
  }
 
  @FlowAction(next=CustomLogin.class)
  public void logout() {
  }
}



HomePageBuyer.java:

package example.bookshop.view.domain;
 
import org.romaframework.aspect.flow.annotation.FlowAction;
import org.romaframework.aspect.view.annotation.ViewClass;
import org.romaframework.aspect.view.screen.Screen;
import org.romaframework.aspect.view.screen.config.ScreenManager;
import org.romaframework.core.flow.ObjectContext;
 
import example.bookshop.view.domain.book.BookMain;
import example.bookshop.view.domain.magazine.MagazineMain;
import example.bookshop.view.domain.order.OrderMain;
 
@ViewClass(layout = "screen://body")
public class HomePageBuyer {
 
  public HomePageBuyer() {
        Screen screen = ObjectContext.getInstance().getComponent(ScreenManager.class).getScreen("main-screen.xml");
        ObjectContext.getInstance().setScreen(screen);
  }
 
  @FlowAction(next=BookMain.class)
  public void books() {
  }
 
  @FlowAction(next=MagazineMain.class)
  public void magazines() {
  }
 
  public void orders() {
      ObjectContext.getInstance().show(new OrderMain(this, true));
  }
 
  @FlowAction(next=CustomLogin.class)
  public void logout() {
  }
}



HomePageClient.java:

package example.bookshop.view.domain;
 
import java.util.ArrayList;
import java.util.List;
 
import org.romaframework.aspect.flow.annotation.FlowAction;
import org.romaframework.aspect.persistence.PersistenceAspect;
import org.romaframework.aspect.persistence.QueryByExample;
import org.romaframework.aspect.session.SessionAspect;
import org.romaframework.aspect.view.annotation.ViewClass;
import org.romaframework.aspect.view.annotation.ViewField;
import org.romaframework.aspect.view.screen.Screen;
import org.romaframework.aspect.view.screen.config.ScreenManager;
import org.romaframework.core.flow.ObjectContext;
 
import example.bookshop.domain.Cart;
import example.bookshop.domain.Product;
 
@ViewClass(layout = "screen://body")
public class HomePageClient {
    public HomePageClient() {
        Screen screen = ObjectContext.getInstance().getComponent(
                ScreenManager.class).getScreen("main-screen.xml");
        ObjectContext.getInstance().setScreen(screen);
    }
 
    @ViewField(render="rowset")
    public List<Product> getProducts() {
        PersistenceAspect db = ObjectContext.getInstance().getContextComponent(PersistenceAspect.class);
        Product sampleProduct = new Product();
        sampleProduct.setAvailability(Product.ON_SALE);
        QueryByExample query = new QueryByExample(Product.class, sampleProduct);
 
        List<Product> list = new ArrayList<Product>();
        for (Object o: db.query(query)) list.add((Product)o);
 
        return list;
    }
 
    @ViewField(render="label")
    public List<Product> getCart() {
        SessionAspect sessionAspect = ObjectContext.getInstance().getComponent(SessionAspect.class);
        Cart cart = (Cart)sessionAspect.getProperty("cart");
        if (cart == null) return new ArrayList<Product>();
        return cart.getProducts();
    }
 
    public void checkOut() {
        SessionAspect sessionAspect = ObjectContext.getInstance().getComponent(SessionAspect.class);
        Cart cart = (Cart)sessionAspect.getProperty("cart");
        if (cart == null) return;
        cart.checkOut();
         
        refresh();
    }
 
    @FlowAction(next = CustomLogin.class)
    public void logout() {
    }
     
    private void refresh() {
        ObjectContext.getInstance().show(new HomePageClient());
    }
}
 

 


HomePageWarehouseEmployee.java:


package example.bookshop.view.domain;
 
import java.util.ArrayList;
import java.util.List;
 
import org.romaframework.aspect.flow.annotation.FlowAction;
import org.romaframework.aspect.persistence.PersistenceAspect;
import org.romaframework.aspect.persistence.QueryByExample;
import org.romaframework.aspect.view.annotation.ViewClass;
import org.romaframework.aspect.view.screen.Screen;
import org.romaframework.aspect.view.screen.config.ScreenManager;
import org.romaframework.core.flow.ObjectContext;
 
import example.bookshop.domain.Order;
import example.bookshop.domain.Product;
import example.bookshop.view.domain.order.OrderMain;
 
@ViewClass(layout = "screen://body")
public class HomePageWarehouseEmployee {
 
    public HomePageWarehouseEmployee() {
        Screen screen = ObjectContext.getInstance().getComponent(
                ScreenManager.class).getScreen("main-screen.xml");
        ObjectContext.getInstance().setScreen(screen);
    }
 
    @FlowAction(next = OrderMain.class)
    public List<Order> getOrders() {
        PersistenceAspect db = ObjectContext.getInstance().getContextComponent(PersistenceAspect.class);
        Order sampleOrder = new Order();
        sampleOrder.setState(Order.PENDING);
        QueryByExample query = new QueryByExample(Product.class, sampleOrder);
 
        List<Order> list = new ArrayList<Order>();
        for (Object o: db.query(query)) list.add((Order)o);
         
        return list;
    }
 
    @FlowAction(next = CustomLogin.class)
    public void logout() {
    }
}

Users in the bookshop have different profiles, which can be administrator, buyer, warehouse employee and client. This profiles need to be defined by using the users' CRUD, which can be accessed using the default administrator user (name: admin, password: admin). When defining profiles, their default home pages can be associated. To enable the use of default home pages, CustomLogin.java needs to be edited:

 

class CustomLogin extends Login {

    @Override
    protected void onSuccess() {

        ...

        try {
            ObjectContext.getInstance().show(Class.forName(this.getClass().getPackage().getName() + "." + user.getProfile().getHomePage()).newInstance());
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
 }

 

Finally, to make CustomLogin appear when a session is started, CustomApplicationConfiguration.java needs to be edited:

 

CustomApplicationConfiguration.java:

 

public class CustomApplicationConfiguration implements ApplicationConfiguration {

    ...

    public void startUserSession() {
        ObjectContext.getInstance().show( new CustomLogin() );
    }

}

1496 Accesos, 0 Ficheros adjuntos 0 Ficheros adjuntos

  • Comentarios