| /* |
| * Copyright 2009 Niclas Hedhman. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or |
| * implied. |
| * |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package org.qi4j.sample.rental.web; |
| |
| import java.text.MessageFormat; |
| import java.text.SimpleDateFormat; |
| import java.util.ArrayList; |
| import org.qi4j.api.injection.scope.Service; |
| import org.qi4j.api.injection.scope.Structure; |
| import org.qi4j.api.mixin.Mixins; |
| import org.qi4j.api.unitofwork.UnitOfWork; |
| import org.qi4j.api.unitofwork.UnitOfWorkFactory; |
| import org.qi4j.sample.rental.domain.Booking; |
| import org.qi4j.sample.rental.domain.Period; |
| import org.qi4j.sample.rental.domain.RentalShop; |
| import org.w3c.dom.Document; |
| import org.w3c.dom.Element; |
| import org.w3c.dom.Node; |
| |
| @Mixins( { MainPage.BodyContributorMixin.class } ) |
| public interface MainPage |
| extends Page |
| { |
| Node[] bookings( QuikitContext context ); |
| |
| abstract class BodyContributorMixin |
| implements MainPage |
| { |
| private SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm" ); |
| |
| @Service |
| BookingPage bookingPage; |
| @Service |
| UrlService urlService; |
| @Structure |
| private UnitOfWorkFactory uowf; |
| |
| public Node[] bookings( QuikitContext context ) |
| { |
| ArrayList<Node> nodes = new ArrayList<Node>(); |
| Document dom = context.dom(); |
| UnitOfWork uow = uowf.currentUnitOfWork(); |
| RentalShop shop = uow.get( RentalShop.class, "SHOP" ); |
| for( Booking booking : shop.findAllBookings() ) |
| { |
| String plate = booking.car().get().licensePlate().get(); |
| |
| // TODO: Next version; |
| // Node node = create( dom, "<li><a href='{1}'>{2}</a>{3}</li>", createLink( booking ), plate, createPeriod( booking.period().get() ) ); |
| // nodes.add( node ); |
| |
| Element listItem = createElement( dom, "li" ); |
| Element bookingLink = (Element) listItem.appendChild( createElement( dom, "a" ) ); |
| bookingLink.setAttribute( "href", createLink( booking ) ); |
| bookingLink.setTextContent( plate ); |
| listItem.appendChild( dom.createTextNode( createPeriod( booking.period().get() ) ) ); |
| nodes.add( listItem ); |
| } |
| Node[] bookingList = new Node[ nodes.size() ]; |
| nodes.toArray( bookingList ); |
| return bookingList; |
| } |
| |
| private Node create( Document dom, String pattern, Object... args ) |
| { |
| String result = MessageFormat.format( pattern, args ); |
| // TODO: fix up ANTLR to parse XML and generate the Node. |
| return null; |
| } |
| |
| private String createPeriod( Period period ) |
| { |
| |
| return " / " + |
| sdf.format( period.startOfPeriod().get() ) + |
| " - " + |
| sdf.format( period.endOfPeriod().get() ); |
| } |
| |
| private Element createElement( Document dom, String element ) |
| { |
| return dom.createElementNS( Page.XHTML, element ); |
| } |
| |
| private String createLink( Booking booking ) |
| { |
| String pageUrl = urlService.createLink( bookingPage ); |
| String entityId = booking.identity().get(); |
| return pageUrl + "/" + entityId; |
| } |
| } |
| } |