首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

生命周期组件框架:生命周期描述语言——可继承状态机示范

2013-11-26 
生命周期组件框架:生命周期描述语言——可继承状态机示例@StateMachineprotected static interface Customer

生命周期组件框架:生命周期描述语言——可继承状态机示例

    @StateMachine    protected static interface CustomerLifecycleMeta {        @StateSet        static interface States {            @Initial            @Function(transition = CustomerLifecycleMeta.Transitions.Activate.class, value = { Active.class })            static interface Draft {}            @Functions({ @Function(transition = CustomerLifecycleMeta.Transitions.Suspend.class, value = Suspended.class),                    @Function(transition = CustomerLifecycleMeta.Transitions.Cancel.class, value = Canceled.class) })            static interface Active {}            @Function(transition = CustomerLifecycleMeta.Transitions.Resume.class, value = Active.class)            static interface Suspended {}            @End            static interface Canceled {}        }        @TransitionSet        static interface Transitions {            static interface Activate {}            static interface Suspend {}            static interface Resume {}            static interface Cancel {}        }    }       @StateMachine    protected static interface InternetServiceLifecycleMeta {        @StateSet        static interface States {            @Initial            @Function(transition = InternetServiceLifecycleMeta.Transitions.Start.class, value = { InternetServiceLifecycleMeta.States.InService.class })            @ValidWhile(on = { CustomerLifecycleMeta.States.Active.class }, relation = InternetServiceLifecycleMeta.Relations.CustomerRelation.class)            static interface New {}            @Function(transition = InternetServiceLifecycleMeta.Transitions.End.class, value = { InternetServiceLifecycleMeta.States.Ended.class })            // @InboundWhile(on = { CustomerLifecycleMeta.States.Active.class },            // relation =            // InternetServiceLifecycleMeta.Relations.CustomerRelation.class)            static interface InService {}            @End            static interface Ended {}        }        @TransitionSet        static interface Transitions {            static interface Start {}            static interface End {}        }        @RelationSet        static interface Relations {            @RelateTo(value = CustomerLifecycleMeta.class)            static interface CustomerRelation {}        }    }    @StateMachine    protected static interface ServiceProviderLifecycle {        @StateSet        static interface States {            @Initial            @Function(transition = Transitions.Shutdown.class, value = Closed.class)            static interface ServiceAvailable {}            @End            static interface Closed {}        }        @TransitionSet        static interface Transitions {            static interface Shutdown {}        }    }    @StateMachine    protected static interface InternetTVServiceLifecycle extends InternetServiceLifecycleMeta {        @StateSet        static interface States extends InternetServiceLifecycleMeta.States {            @ValidWhile(relation = TVProvider.class, on = ServiceAvailable.class)            static interface New extends InternetServiceLifecycleMeta.States.New {}        }        @RelationSet        static interface Relations extends InternetServiceLifecycleMeta.Relations {            @RelateTo(InternetTVProviderLifecycle.class)            static interface TVProvider {}        }    }    @StateMachine    protected static interface InternetTVProviderLifecycle extends ServiceProviderLifecycle {}

?

    @LifecycleMeta(CustomerLifecycleMeta.class)    public static class Customer extends ReactiveObject {        protected Customer() {            initialState(Draft.class.getSimpleName());        }        @Transition        public void activate() {}        @Transition        public void suspend() {}        @Transition        public void resume() {}        @Transition        public void cancel() {}    }    @LifecycleMeta(InternetServiceLifecycleMeta.class)    public class InternetServiceOrder extends ReactiveObject {        private Date startDate;        private Date endDate;        @Relation(InternetServiceLifecycleMeta.Relations.CustomerRelation.class)        private Customer customer;        private String type;        public InternetServiceOrder() {            initialState(InternetServiceLifecycleMeta.States.New.class.getSimpleName());        }        public InternetServiceOrder(Date startDate, Date endDate, Customer customer, String type) {            super();            this.startDate = startDate;            this.endDate = endDate;            this.customer = customer;            this.type = type;            initialState(InternetServiceLifecycleMeta.States.New.class.getSimpleName());        }        @Transition        public void start() {}        @Transition        public void end() {}        public void setStartDate(Date startDate) {            this.startDate = startDate;        }        public void setEndDate(Date endDate) {            this.endDate = endDate;        }        public void setCustomer(Customer customer) {            this.customer = customer;        }        public void setType(String type) {            this.type = type;        }        public Date getStartDate() {            return startDate;        }        public Date getEndDate() {            return endDate;        }        public Customer getCustomer() {            return customer;        }        public String getType() {            return type;        }    }

?

    @LifecycleMeta(InternetServiceLifecycleMeta.class)    public static class BaseService<T extends BaseServiceProvider> extends ReactiveObject {        private Customer customer;        public BaseService(Customer customer) {            initialState(InternetServiceLifecycleMeta.States.New.class.getSimpleName());            this.customer = customer;        }        private T provider;        public T getProvider() {            return provider;        }        public void setProvider(T provider) {            this.provider = provider;        }        @Relation(InternetServiceLifecycleMeta.Relations.CustomerRelation.class)        public Customer getCustomer() {            return customer;        }        public void setCustomer(Customer customer) {            this.customer = customer;        }        @Transition        void start() {}        @Transition        void end() {}    }    @LifecycleMeta(ServiceProviderLifecycle.class)    public static class BaseServiceProvider extends ReactiveObject {        public BaseServiceProvider() {            initialState(ServiceProviderLifecycle.States.ServiceAvailable.class.getSimpleName());        }        @Transition        void shutdown() {}    }    @LifecycleMeta(InternetTVServiceLifecycle.class)    public static class InternetTVService extends BaseService<InternetTVServiceProvider> {        public InternetTVService(Customer customer) {            super(customer);        }        @Relation(InternetTVServiceLifecycle.Relations.TVProvider.class)        public InternetTVServiceProvider getProvider() {            return super.getProvider();        }    }    @LifecycleMeta(InternetTVProviderLifecycle.class)    public static class InternetTVServiceProvider extends BaseServiceProvider {}

?

    @Test    public void test_inherited_valid_while_relation_validation() {        final InternetTVServiceProvider provider = new InternetTVServiceProvider();        assertEquals(InternetTVProviderLifecycle.States.ServiceAvailable.class.getSimpleName(), provider.getState());        Customer customer = new Customer();        customer.activate();        assertEquals(CustomerLifecycleMeta.States.Active.class.getSimpleName(), customer.getState());        final InternetTVService service = new InternetTVService(customer);        service.setProvider(provider);        service.start();        assertEquals(InternetServiceLifecycleMeta.States.InService.class.getSimpleName(), service.getState());    }    @Test(expected = LifecycleException.class)    public void test_inherited_valid_while_relation_validation_negative_with_self_valid_while() throws LifecycleException {        final InternetTVServiceProvider provider = new InternetTVServiceProvider();        assertEquals(InternetTVProviderLifecycle.States.ServiceAvailable.class.getSimpleName(), provider.getState());        provider.shutdown();        assertEquals(InternetTVProviderLifecycle.States.Closed.class.getSimpleName(), provider.getState());        final Customer customer = new Customer();        customer.activate();        assertEquals(CustomerLifecycleMeta.States.Active.class.getSimpleName(), customer.getState());        final InternetTVService service = new InternetTVService(customer);        service.setProvider(provider);        try {            service.start();        } catch (LifecycleException e) {            assertInvalidStateErrorByValidWhile(e, provider, service, VOIPProviderLifecycleMeta.States.ServiceAvailable.class);        }    }

?前文:生命周期组件框架——关系型状态及服务

热点排行