/** * Pozor, skonzumuje vstupny parameter a znehodnoti ho. Pouzit treba dalej navratovy objekt. * * @param configuration */ public ConfigurationType process(ConfigurationType configuration) { // Vezme polozku pre BTEConfiguration ConfigurationType BTE = getBTE(configuration); // a zmeni zobrazenie typu cieloveho jazykoveho elementu na "key" BTE.getMappingOfTargetElement().setTargetElementName("key"); BTE.getMappingOfTargetElement().setTargetNameType(TargetNameType.USER_DEFINED); configuration.getChildren().remove(BTE); // Naklonujem si strom (bez BTE) ConfigurationType clone = configuration.cloneBranch(); // Vytvorim si wrapper pre annotatcne typy ConfigurationType annType = generateWrapperForType(); // a vlozim ho pod BTE BTE.getChildren().add(annType); annType.setParent(BTE); // K nemu pripojim polozky, ktore mozu byt aplikovane na anotacny typ addAnnTypes(annType, configuration, BTE); // Obdobne pre vlastnost ConfigurationType property = generateWrapperForProperty(); annType.getChildren().add(property); property.setParent(annType); // Tu mozu ist aj niektore polozky, ktore uz boli pridane pod annType, // preto sa spracuvaju a pridavaju klony - kopie addMethodTypes(property, clone, BTE); configuration.getChildren().add(BTE); // A nakoniec este spracuje mapovanie na nazvy processMapsTo(configuration); return configuration; }
/** * Metoda prida z modelu pod propType ako potomkov polozky aplikovatelne na vlasnost. * * @param annType * @param model * @param BTE */ private void addMethodTypes( ConfigurationType propType, ConfigurationType model, ConfigurationType BTE) { for (ConfigurationType child : model.getChildren()) { // Vyber poloziek, ktore maju medzi cielovymi jazykovymi elementami // metodu if (child.getMappingOfTargetElement().getTargetElements() != null && Arrays.asList(child.getMappingOfTargetElement().getTargetElements()) .contains(ElementType.METHOD)) { propType.getChildren().add(child); child.setParent(propType); changeTravelerMeth(child, BTE); } } // Invalidacia modelu, pre istotu model.setChildren(new ArrayList<ConfigurationType>()); }
/** * Metoda prida z modelu pod annType ako potomkov polozky aplikovatelne na anotacny typ. * * @param annType * @param model * @param BTE */ private void addAnnTypes( ConfigurationType annType, ConfigurationType model, ConfigurationType BTE) { for (ConfigurationType child : model.getChildren()) { // Vyber poloziek, ktore maju medzi cielovymi jazykovymi elementami // anotacny typ, pritom sa nesmiem spoliehat, ze getTargetElements // mi nevrati null if (child.getMappingOfTargetElement().getTargetElements() != null && (Arrays.asList(child.getMappingOfTargetElement().getTargetElements()) .contains(ElementType.ANNOTATION_TYPE) || Arrays.asList(child.getMappingOfTargetElement().getTargetElements()) .contains(ElementType.TYPE))) { annType.getChildren().add(child); child.setParent(annType); changeTravelerAnn(child, BTE); } // Ostatne sa nepridaju } // Invalidacia modelu, pre istotu model.setChildren(new ArrayList<ConfigurationType>()); }
/** * Metoda pre zmenu niektorych poloziek pri presuvanej polozke pre anotacny typ. * * @param child * @param BTE */ private void changeTravelerMeth(ConfigurationType child, ConfigurationType BTE) { // Vypis cieloveho jazykoveho elementu nepotrebujem child.getMappingOfTargetElement().setQNameOfTargetProcView(XMLProcessing.SKIP_PROCESS); // A pod property chcem zobrazit iba metainformacie nad vlastnostami child .getMappingOfConfigurationToSources() .setSupportedSources(new ElementKind[] {ElementKind.METHOD}); // A kotva na BTE child.getMappingOfConfigurationToSources().setPositionAnchor(BTE); child .getMappingOfConfigurationToSources() .setRelPositionToAnchor(RelativePositionToAnchor.SAME_LOWER_LVL); }
/** * Metoda pre zmenu niektorych poloziek pri presuvanej polozke pre anotacny typ. * * @param child * @param BTE */ private void changeTravelerAnn(ConfigurationType child, ConfigurationType BTE) { // Vypis cieloveho jazykoveho elementu nepotrebujem child.getMappingOfTargetElement().setQNameOfTargetProcView(XMLProcessing.SKIP_PROCESS); // A pod annType chcem zobrazit iba metainformacie nad anotacnymi typmi child .getMappingOfConfigurationToSources() .setSupportedSources(new ElementKind[] {ElementKind.ANNOTATION_TYPE}); // A napokon nastavim ako kotvu element pre BTE, tak bude jedna vetva // s unikatnym klucom BTE (nazov baliku) obsahovat iba metainformacie // o mapovani anotacnych typov z daneho balika child.getMappingOfConfigurationToSources().setPositionAnchor(BTE); child .getMappingOfConfigurationToSources() .setRelPositionToAnchor(RelativePositionToAnchor.SAME_LOWER_LVL); }