private static void getOptionalElements(Operation operation,
			Map<String, ComplexTypeParameter> tipuriComplexe,
			XSParticle xsParticle) {
		if (xsParticle != null) {
			XSTerm pterm = xsParticle.getTerm();
			// daca am gasit un element inner

			if (pterm.isElementDecl()) {

				if (pterm.asElementDecl().getName().equals("execInfo")) {
					getOptionalElements(operation, tipuriComplexe, pterm
							.asElementDecl().getType().asComplexType()
							.getContentType().asParticle());
					return;
				}

				if (pterm.asElementDecl().getName().equals("name")) {
					operation.tagForExecName = pterm.asElementDecl().getType()
							.getName();

					return;
				}
				if (pterm.asElementDecl().getName().equals("type")) {
					operation.tagForExecType = pterm.asElementDecl().getType()
							.getName();
					return;
				}

				if (pterm.asElementDecl().getName().equals("description")) {
					operation.tagForExecDescription = pterm.asElementDecl()
							.getType().getName();
					return;
				}

				SimpleTypeParameter stp = null;
				if (tipuriComplexe.containsKey(pterm.asElementDecl().getType()
						.getName())) {
					stp = createComplexParameter(pterm.asElementDecl()
							.getType().getName(), tipuriComplexe);
					stp.setName(pterm.asElementDecl().getName());
				} else {
					stp = createSimpleParameter(
							pterm.asElementDecl().getName(), pterm
									.asElementDecl().getType().getName());
				}
				operation.getParameters().add(stp);

				XSComplexType xsComplexType = (pterm.asElementDecl()).getType()
						.asComplexType();

			} else if (pterm.isModelGroup()) {

				XSModelGroup xsModelGroup2 = pterm.asModelGroup();
				XSParticle[] xsParticleArray = xsModelGroup2.getChildren();
				for (XSParticle xsParticleTemp : xsParticleArray) {
					getOptionalElements(operation, tipuriComplexe,
							xsParticleTemp);
				}
			}
		}
	}