⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 premiumcomputation.java

📁 一个很好的微工作流内核
💻 JAVA
字号:
/* * 	  *  Copyright (c) 2003 Dragos Manolescu (dam@micro-workflow.com) *  *  See the LICENSE file for licensing information. */package com.microworkflow.pcexample;import com.microworkflow.execution.Performer;import com.microworkflow.process.*;/** * This class computes a homeowners' premium the micro-workflow way. * This requires: * <ol> * <li>Setting up the domain objects * <li>Setting up the context * <li>Building the workflow * <li>Running the workflow * </ol> * The sole purpose of this example is to show how to use the * process and execution components of the micro-workflow framework. * It doesn't demonstrate any of the advanced workflow features, nor does * it show the benefits of flow independence. *  * @author dam */public class PremiumComputation {	protected Table baseClassPremium;	protected Table formFactor;	protected Table pccFactor;	protected Table keyFactor;	protected Table ordinanceOrLawFactor;	public static void main(String[] args) {		PremiumComputation pc=new PremiumComputation();		pc.computePremium();	}	public void initializeTables() {		baseClassPremium = new Table();		baseClassPremium.put(CustomerData.HO_00_03, new Integer(2), new Double(300));		baseClassPremium.put(CustomerData.HO_00_06, new Integer(2), new Double(100));		formFactor = new Table();		formFactor.put(CustomerData.HO_00_03, new Double(1.5));		formFactor.put(CustomerData.HO_00_06, new Double(1.75));		pccFactor = new Table();		pccFactor.put(CustomerData.CONSTRUCTION_TYPE_FRAME, new Integer(8), new Double(1.5));		pccFactor.put(CustomerData.CONSTRUCTION_TYPE_FRAME, new Integer(9), new Double(1.8));		pccFactor.put(CustomerData.CONSTRUCTION_TYPE_FRAME, new Integer(10), new Double(2.1));		pccFactor.put(CustomerData.CONSTRUCTION_TYPE_MASONRY, new Integer(8), new Double(1.1));		pccFactor.put(CustomerData.CONSTRUCTION_TYPE_MASONRY, new Integer(9), new Double(1.3));		pccFactor.put(CustomerData.CONSTRUCTION_TYPE_MASONRY, new Integer(10), new Double(1.8));		keyFactor = new Table();		keyFactor.put(CustomerData.COVERAGE_A,new Double(10000),new Double(0.45));		keyFactor.put(CustomerData.COVERAGE_A,new Double(12000),new Double(0.51));		keyFactor.put(CustomerData.COVERAGE_A,new Double(14000),new Double(0.58));		keyFactor.put(CustomerData.COVERAGE_A,new Double(16000),new Double(0.67));		keyFactor.put(CustomerData.COVERAGE_C,new Double(1000),new Double(0.21));		keyFactor.put(CustomerData.COVERAGE_C,new Double(2000),new Double(0.24));		keyFactor.put(CustomerData.COVERAGE_C,new Double(3000),new Double(0.28));		keyFactor.put(CustomerData.COVERAGE_C,new Double(4000),new Double(0.33));		ordinanceOrLawFactor = new Table();		ordinanceOrLawFactor.put(new Double(10),new Double(1.1));				ordinanceOrLawFactor.put(new Double(20),new Double(1.25));		ordinanceOrLawFactor.put(new Double(30),new Double(1.38));		ordinanceOrLawFactor.put(new Double(40),new Double(1.48));	}	public Activity getInitialBasePremiumWorkflow() {		Primitive getBaseValue =			new Primitive("BaseClassPremiumTable","baseValue",				new Performer() {					public Object execute() {						Table table=(Table)getTarget();						CustomerData cdata=(CustomerData)get("CustomerData");						return table.get(cdata.getPolicyType(),cdata.getTerritory());					}				}			);		Primitive makeBasePremium =			new Primitive("PremiumFactory","baseClassPremium",				new Performer() {					public Object execute() {						Premium premiumFactory=(Premium)getTarget();						Double value=(Double)get("baseValue");						return premiumFactory.premiumWith(value);					}				}			);		Primitive getFormFactor =			new Primitive("FormFactorTable","formFactor",				new Performer() {					public Object execute() {						Table table=(Table)getTarget();						CustomerData cdata=(CustomerData)get("CustomerData");						return table.get(cdata.getPolicyType());					}				}			);		Primitive multFormFactor =			new Primitive("baseClassPremium","intermediatePremium",				new Performer() {					public Object execute() {						Premium basePremium=(Premium)getTarget();						Double formFactor=(Double)get("formFactor");						return basePremium.mult(formFactor);					}				}			);		Primitive getPCCFactor =			new Primitive("PCCFactorTable","pccFactor",				new Performer() {					public Object execute() {						Table table=(Table)getTarget();						CustomerData cdata=(CustomerData)get("CustomerData");						return table.get(cdata.getConstructionType(),cdata.getProtectionClass());					}				}			);		Primitive multPCCFactor =			new Primitive("intermediatePremium","keyPremium",				new Performer() {					public Object execute() {						Premium premium=(Premium)getTarget();						Double pccFactor=(Double)get("pccFactor");						return premium.mult(pccFactor);					}				}			);		Primitive getKeyFactor =			new Primitive("KeyFactorTable","keyFactor",				new Performer() {					public Object execute() {						Table keyFactorTable=(Table)getTarget();						CustomerData cdata=(CustomerData)get("CustomerData");						return keyFactorTable.get(cdata.getCoverageType(),cdata.getCoverageAmount());					}}			);		Primitive multKeyFactor =			new Primitive("keyPremium","initialBasePremium",				new Performer() {					public Object execute() {						Premium keyPremium=(Premium)getTarget();						Double keyFactor=(Double)get("keyFactor");						return keyPremium.mult(keyFactor);					}				}			);		return getBaseValue.				addStep(makeBasePremium).				addStep(getFormFactor).				addStep(multFormFactor).				addStep(getPCCFactor).				addStep(multPCCFactor).				addStep(getKeyFactor).				addStep(multKeyFactor);	}		public Activity getFinalBasePremiumWorkflow() {		Primitive getOLFactor =			new Primitive("Ordinance/LawFactorTable","olFactor",				new Performer() {					public Object execute() {						Table table=(Table)getTarget();						CustomerData cdata=(CustomerData)get("CustomerData");						return table.get(cdata.getIncreaseOrdinanceOrLawCoverage());					}}			);		Primitive multOLFactor =			new Primitive("initialBasePremium","finalBasePremium",				new Performer() {					public Object execute() {						Premium p=(Premium)getTarget();						Double factor=(Double)get("olFactor");						return p.mult(factor);					}}			);		Conditional ifSuperiorConstruction =			new Conditional(new TestCondition() {				public boolean evaluate() {					CustomerData cdata=(CustomerData)get("CustomerData");					return cdata.isSuperiorConstruction().booleanValue();				}},				new Primitive("finalBasePremium","finalBasePremium",					new Performer() {						public Object execute() {							Premium p=(Premium)getTarget();							Double factor=(Double)get("SuperiorConstructionFactor");							return p.mult(factor);						}}				));		return getOLFactor.addStep(multOLFactor).addStep(ifSuperiorConstruction);	}		public Activity getDebitAndCreditWorkflow() {		Primitive getPremiumValue =			new Primitive("finalBasePremium","premiumValue",				new Performer(){					public Object execute() {						Premium p=(Premium)getTarget();						return p.getValue();					}}			);		Primitive computeDebitOrCredit =			new Primitive("endorsement","debitOrCredit",				new Performer(){					public Object execute() {						Endorsement endorsement=(Endorsement)getTarget();						Double basePremium=(Double)get("premiumValue");						return endorsement.computeDebitOrCreditFor(basePremium);					}});		Primitive addToPremium =			new Primitive("finalBasePremium",				new Performer(){					public Object execute() {						Premium p=(Premium)getTarget();						Double debitOrCredit=(Double)get("debitOrCredit");						p.addDebitOrCredit(debitOrCredit);						return null;					}});		Iterative computeDebitsAndCredits =			new Iterative(				"CustomerData",				new Performer(){					public Object execute() {						CustomerData cdata=(CustomerData)getTarget();						return cdata.getEndorsements();					}},				"endorsement",				computeDebitOrCredit.addStep(addToPremium));		Primitive addDebitsAndCredits =			new Primitive("finalBasePremium","finalPremium",				new Performer(){					public Object execute() {						Premium p=(Premium)getTarget();						return p.adjustValue();					}});		return getPremiumValue.				addStep(computeDebitsAndCredits).				addStep(addDebitsAndCredits);	}			public void computePremium() {		initializeTables();		CustomerData cdata=new CustomerData();		cdata.setPolicyType(CustomerData.HO_00_03);		cdata.setConstructionType(CustomerData.CONSTRUCTION_TYPE_MASONRY);		cdata.setCoverageAmount(new Double(16000));		cdata.setCoverageType(CustomerData.COVERAGE_A);		cdata.setProtectionClass(new Integer(9));		cdata.setTerritory(new Integer(2));		cdata.setIncreaseOrdinanceOrLawCoverage(new Double(10));		cdata.setSuperiorConstruction(new Boolean(true));		cdata.addEdorsement(new Deductible(1000));		cdata.addEdorsement(new MPDiscount(10));		cdata.addEdorsement(new PDDiscount(0.02));		WorkflowContext wc=new WorkflowContext();		wc.put("CustomerData",cdata);		wc.put("BaseClassPremiumTable",baseClassPremium);		wc.put("FormFactorTable",formFactor);		wc.put("PCCFactorTable",pccFactor);		wc.put("KeyFactorTable",keyFactor);		wc.put("Ordinance/LawFactorTable",ordinanceOrLawFactor);		wc.put("SuperiorConstructionFactor",new Double(0.8));		wc.put("PremiumFactory",new Premium());		Workflow premiumWorkflow=new Workflow();		premiumWorkflow.setDefinition(getInitialBasePremiumWorkflow().									  addStep(getFinalBasePremiumWorkflow()).									  addStep(getDebitAndCreditWorkflow()));		WorkflowContext result=premiumWorkflow.executeWith(wc);		Premium p=(Premium)(wc.get("finalPremium"));		System.out.println("Premium = " + p.getValue());	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -