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

📄 javasrcmodeldigester.java

📁 一个java写的business process management系统
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
		}
		
		private void generateBSFEngineCode(CodeBlock block, BSFEngineDescriptor desc) {
			Field bsfManagerField = new Field("bsfManager");
			bsfManagerField.setType("org.apache.bsf.BSFManager");
			bsfManagerField.setValue("new org.apache.bsf.BSFManager()");
			block.addFragment(bsfManagerField);
		
			StringBuffer buf = new StringBuffer();
			buf.append("org.apache.bsf.BSFManager.registerScriptingEngine(\"")
				.append(desc.getLanguage())
				.append("\", \"")
				.append(desc.getEngineClassName())
				.append("\", new String[] {");
			for (Iterator iterator = desc.getExtensions().iterator(); iterator.hasNext(); ) {
				String ext = (String) iterator.next();
				buf.append("\"").append(ext).append("\"");
				if (iterator.hasNext())
					buf.append(", ");
			}
			buf.append("});");
			block.addFragment(new CodeLine(buf.toString()));
		}
	}
	






	private class DecisionFlowletNode extends FlowStructureModelDigester.DecisionFlowletNode {
		public DecisionFlowletNode(IFlowletBind flowletBind, FlowModelBind flowModelBind) {
			super(flowletBind, flowModelBind);
		}

		public void visit(IFlowVisitor visitor) {
			if (isVisited())
				return;
			DecisionFlowletBind flowletBind = (DecisionFlowletBind)getFlowletBind();
			IfThenElse ifThenElse = new IfThenElse();
			
			ifThenElse.setBooleanStatement(
				decisionStmntCompl.completeStatement(flowletBind.getLabel().getText(), "dictionary"));

			((JavaSrcVisitor)visitor).getCodeBlock().addFragment(ifThenElse);
			
			createJavadoc(flowletBind);

			setVisited(true);
			//	true block
			((JavaSrcVisitor)visitor).setCodeBlock(ifThenElse.getTrueBlock());
			if (getFollowingTrueFlowletNode() != null)
				getFollowingTrueFlowletNode().visit(visitor);
			//	false block
			((JavaSrcVisitor)visitor).setCodeBlock(ifThenElse.getFalseBlock());
			if (getFollowingFalseFlowletNode() != null)
				getFollowingFalseFlowletNode().visit(visitor);
		}
		
		private void createJavadoc(DecisionFlowletBind flowletBind) {
			if (flowletBind.getDescription() == null)
				return;
			JavadocBlock javadoc = javaFile.getJavaClass().getJavadoc();
			JavadocBlock.XDocletTag xdTag = javadoc.new XDocletTag(FLOW4J_XDOCLET_PREFIX + "decision-flowlet");
			javadoc.addTag(xdTag);
			xdTag.addParam("name", flowletBind.getDescription());
			StringBuffer buf =
				new StringBuffer(flowletBind.getLabel().getText());
			int i = buf.toString().indexOf("\"");
			while (i > -1) {
				buf.replace(i, i + 1, """);
				i = buf.toString().indexOf("\"");
			}
			xdTag.addParam("statement", buf.toString());
		}
	}


	private class CallFlowletNode extends FlowStructureModelDigester.CallFlowletNode {
		public CallFlowletNode(IFlowletBind flowletBind, FlowModelBind flowModelBind) {
			super(flowletBind, flowModelBind);
		}

		public void visit(IFlowVisitor visitor) {
			if (isVisited())
				return;
			CallFlowletBind flowletBind = (CallFlowletBind)getFlowletBind();
			String flowStart = flowletBind.getLabel().getText();

			addExecuteFlowCode(((JavaSrcVisitor)visitor).getCodeBlock(), getFlowModelBind().getFlowName(), flowStart);
			
			setVisited(true);
			super.visit(visitor);
		}
	}


	/**
	 * Adds the code that executes a flow. If it is the same flow then the right start method
	 * is called directly in thios flow, otherwise the FlowManger is asked to execute the other flow
	 * @param codeBlock	the code block where the java code will be inserted
	 * @param thisFlowName	the name of the current flow
	 * @param flowStart	the other flow's name and startFlowlet name
	 */
	private void addExecuteFlowCode(CodeBlock codeBlock, String thisFlowName, String flowStart) {
		StringTokenizer tokenizer = new StringTokenizer(flowStart, Flow4JRuntimeConsts.FLOW_START_DELIMITER);
		boolean bool = tokenizer.countTokens() == 2;
		if (bool) {
			String flowName = tokenizer.nextToken();
			String startFlowletName = tokenizer.nextToken();
			
			if (thisFlowName.equals(flowName)) {
				//	find start method name
				String startMethodName = null;
				for (Iterator iter = getStartFlowletNodes().iterator(); iter.hasNext();) {
					IFlowNode startFlowletNode = (IFlowNode)iter.next();
					StartFlowletBind startFlowletBind = (StartFlowletBind)((AbstractFlowletNode)startFlowletNode).getFlowletBind();
					String startLabelText = startFlowletBind.getLabel().getText();
					startMethodName = startFlowletBind.getId(flowModelBind) + "_" + startLabelText;
					if (startLabelText.equals(startFlowletName))
						break;
				}
				//	direct call of the start method in this flow
				codeBlock.addFragment(new CodeLine(startMethodName + "(dictionary);\t// " + flowStart));
			}
			else
				bool = false;
		}
			
		if (! bool)
			codeBlock.addFragment(
				new CodeLine("FlowManager.executeFlow(\"" + flowStart
					+ "\", dictionary);"));
	}



	private class JoinFlowletNode extends FlowStructureModelDigester.JoinFlowletNode {		
		Method method;
		
		JoinFlowletNode(IFlowletBind flowletBind, FlowModelBind flowModelBind) {
			super(flowletBind, flowModelBind);
		}

		public void visit(IFlowVisitor visitor) {
			JoinFlowletBind flowletBind = (JoinFlowletBind)getFlowletBind();
			CodeBlock codeBlock;
			if (getPreviousFlowletNodes().size() != 1) {
				if (!isVisited()) {
					String methodName = flowletBind.getId(getFlowModelBind());
					method = new Method(methodName);
					method.addModifier(Consts.MODIFIER_STATIC);
					method.addModifier(Consts.MODIFIER_PRIVATE);
					method.addModifier(Consts.MODIFIER_FINAL);
					method.addMethodParameter(new MethodParameter("FlowDictionary", "dictionary"));
					javaFile.getJavaClass().addMethod(method);
				}
				((JavaSrcVisitor)visitor).getCodeBlock().addFragment(new CodeLine(method.getName() + "(dictionary);"));
				((JavaSrcVisitor)visitor).setCodeBlock(method.getCodeBlock());
			}			
			
			if (isVisited())
				return;

			setVisited(true);
			super.visit(visitor);
		}
	}






	private class JumpFlowletNode extends FlowStructureModelDigester.JumpFlowletNode {
		public JumpFlowletNode(IFlowletBind flowletBind, FlowModelBind flowModelBind) {
			super(flowletBind, flowModelBind);
		}

		public void visit(IFlowVisitor visitor) {
			if (isVisited())
				return;
			JumpFlowletBind flowletBind = (JumpFlowletBind)getFlowletBind();
			String flowStart = flowletBind.getLabel().getText();
			
			addExecuteFlowCode(((JavaSrcVisitor)visitor).getCodeBlock(), getFlowModelBind().getFlowName(), flowStart);
						
			setVisited(true);
			super.visit(visitor);
		}
	}


	private class TemplateFlowletNode extends FlowStructureModelDigester.TemplateFlowletNode {
		public TemplateFlowletNode(IFlowletBind flowletBind, FlowModelBind flowModelBind) {
			super(flowletBind, flowModelBind);
		}

		public void visit(IFlowVisitor visitor) {
			if (isVisited())
				return;
			TemplateFlowletBind flowletBind = (TemplateFlowletBind)getFlowletBind();
			String templateName = flowletBind.getLabel().getText();

			((JavaSrcVisitor)visitor).getCodeBlock().addFragment(
				new CodeLine("dictionary.put(Flow4JRuntimeConsts.DICT_KEY_TEMPLATE_NAME, \""
					+ templateName + "\");"));
			
			createJavadoc(flowletBind);
			
			setVisited(true);
			super.visit(visitor);
		}
		
		private void createJavadoc(TemplateFlowletBind flowletBind) {
			if (flowletBind.getDescription() == null)
				return;
			JavadocBlock javadoc = javaFile.getJavaClass().getJavadoc();
			JavadocBlock.XDocletTag xdTag = javadoc.new XDocletTag(FLOW4J_XDOCLET_PREFIX + "template-flowlet");
			javadoc.addTag(xdTag);
			xdTag.addParam("name", flowletBind.getDescription());
			StringBuffer buf =
				new StringBuffer(flowletBind.getLabel().getText());
			int i = buf.toString().indexOf("\"");
			while (i > -1) {
				buf.replace(i, i + 1, """);
				i = buf.toString().indexOf("\"");
			}
			xdTag.addParam("template", buf.toString());
		}


	}


	private class EndFlowletNode extends FlowStructureModelDigester.EndFlowletNode {
		public EndFlowletNode(IFlowletBind flowletBind, FlowModelBind flowModelBind) {
			super(flowletBind, flowModelBind);
		}

		public void visit(IFlowVisitor visitor) {
			if (isVisited())
				return;
			((JavaSrcVisitor)visitor).getCodeBlock().addFragment(new CodeLine("//\tflow ends here"));
						
			setVisited(true);
			super.visit(visitor);
		}
	}



























	/**
	 * @see net.orthanc.flow4j.model.IModelDigester#digest(net.orthanc.flow4j.model.bind.FlowModelBind)
	 */
	public void digest(FlowModelBind flowModelBind) {
		this.flowModelBind = flowModelBind;

//		flowName = flowModelBind.getFlowName();
		Method getFlowNameMethod = new Method("getName");
		getFlowNameMethod.addModifier(Consts.MODIFIER_PUBLIC);
		getFlowNameMethod.addModifier(Consts.MODIFIER_FINAL);
		getFlowNameMethod.setReturnType("String");
		getFlowNameMethod.addToCodeBlock(new CodeLine("return \"" + flowModelBind.getFlowName() + "\";"));
		javaFile.getJavaClass().addMethod(getFlowNameMethod);

		super.digest(flowModelBind);
	}


	public void digestStartFlowlet(StartFlowletBind flowletBind, FlowModelBind flowModelBind) {
		addFlowletNode(new StartFlowletNode(flowletBind, flowModelBind));
	}

	public void digestJavaTaskFlowlet(JavaTaskFlowletBind flowletBind, FlowModelBind flowModelBind) {
		addFlowletNode(new JavaTaskFlowletNode(flowletBind, flowModelBind));
	}
	
	public void digestScriptTaskFlowlet(ScriptTaskFlowletBind flowletBind, FlowModelBind flowModelBind) {
		addFlowletNode(new ScriptTaskFlowletNode(flowletBind, flowModelBind));
	}

	public void digestDecisionFlowlet(DecisionFlowletBind flowletBind, FlowModelBind flowModelBind) {
		addFlowletNode(new DecisionFlowletNode(flowletBind, flowModelBind));
	}

	public void digestCallFlowlet(CallFlowletBind flowletBind, FlowModelBind flowModelBind) {
		addFlowletNode(new CallFlowletNode(flowletBind, flowModelBind));
	}

	public void digestJoinFlowlet(JoinFlowletBind flowletBind, FlowModelBind flowModelBind) {
		addFlowletNode(new JoinFlowletNode(flowletBind, flowModelBind));
	}

	public void digestJumpFlowlet(JumpFlowletBind flowletBind, FlowModelBind flowModelBind) {
		addFlowletNode(new JumpFlowletNode(flowletBind, flowModelBind));
	}

	public void digestTemplateFlowlet(TemplateFlowletBind flowletBind, FlowModelBind flowModelBind) {
		addFlowletNode(new TemplateFlowletNode(flowletBind, flowModelBind));
	}

	public void digestEndFlowlet(EndFlowletBind flowletBind, FlowModelBind flowModelBind) {
		addFlowletNode(new EndFlowletNode(flowletBind, flowModelBind));
	}












}

⌨️ 快捷键说明

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