main #48
@ -17,8 +17,8 @@ class GameModelLoader {
 | 
				
			|||||||
        const storedScriptAccounts = this.loadScriptAccountComponents();
 | 
					        const storedScriptAccounts = this.loadScriptAccountComponents();
 | 
				
			||||||
        const storedGamesystems = this.loadGamesystems();
 | 
					        const storedGamesystems = this.loadGamesystems();
 | 
				
			||||||
        const storedCharacters = this.loadCharacters();
 | 
					        const storedCharacters = this.loadCharacters();
 | 
				
			||||||
        const storedItemgroupsd = this.loadItemgroups();
 | 
					        const storedItemgroups = this.loadItemgroups();
 | 
				
			||||||
        return new StoredGameModel_1.StoredGameModel(gameModelName, storedScriptAccounts, storedGamesystems, storedCharacters, [], []);
 | 
					        return new StoredGameModel_1.StoredGameModel(gameModelName, storedScriptAccounts, storedGamesystems, storedCharacters, storedItemgroups, []);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    loadScriptAccountComponents() {
 | 
					    loadScriptAccountComponents() {
 | 
				
			||||||
        const scriptAccountDir = path.join(this.gameModelDir, ModelComponentFileDirectory_1.ModelComponentFileDirectory.SCRIPTACCOUNT_DIR_NAME);
 | 
					        const scriptAccountDir = path.join(this.gameModelDir, ModelComponentFileDirectory_1.ModelComponentFileDirectory.SCRIPTACCOUNT_DIR_NAME);
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										43
									
								
								app/storage/loader/ItemLoader.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								app/storage/loader/ItemLoader.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,43 @@
 | 
				
			|||||||
 | 
					"use strict";
 | 
				
			||||||
 | 
					Object.defineProperty(exports, "__esModule", { value: true });
 | 
				
			||||||
 | 
					exports.ItemLoader = void 0;
 | 
				
			||||||
 | 
					const StoreComponent_1 = require("../StoreComponent");
 | 
				
			||||||
 | 
					const FileUtils_1 = require("../FileUtils");
 | 
				
			||||||
 | 
					const fs = require("node:fs");
 | 
				
			||||||
 | 
					const path = require("node:path");
 | 
				
			||||||
 | 
					const ModelComponentType_1 = require("../../../src/app/project/game-model/ModelComponentType");
 | 
				
			||||||
 | 
					class ItemLoader {
 | 
				
			||||||
 | 
					    constructor(itemDir) {
 | 
				
			||||||
 | 
					        this.itemDir = itemDir;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    loadItemgroups() {
 | 
				
			||||||
 | 
					        return this.loadItemgroupsRecursively(this.itemDir);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    loadItemgroupsRecursively(currentDir) {
 | 
				
			||||||
 | 
					        let loadedItemgroups = [];
 | 
				
			||||||
 | 
					        const itemgroupFiles = FileUtils_1.FileUtils.listFilesInDirectory(currentDir);
 | 
				
			||||||
 | 
					        itemgroupFiles.forEach(itemgroupFile => {
 | 
				
			||||||
 | 
					            if (fs.lstatSync(itemgroupFile).isDirectory()) {
 | 
				
			||||||
 | 
					                const childgroup = this.loadItemgroupsRecursively(itemgroupFile);
 | 
				
			||||||
 | 
					                loadedItemgroups = loadedItemgroups.concat(childgroup);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else if (path.basename(itemgroupFile).endsWith(".json") && this.fileRepresentsItemgroup(itemgroupFile)) {
 | 
				
			||||||
 | 
					                const loadedItemgroup = this.loadSingleItemgroup(itemgroupFile);
 | 
				
			||||||
 | 
					                loadedItemgroups.push(loadedItemgroup);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					        return loadedItemgroups;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    loadSingleItemgroup(itemgroupFile) {
 | 
				
			||||||
 | 
					        if (itemgroupFile.endsWith(".json")) {
 | 
				
			||||||
 | 
					            const data = fs.readFileSync(itemgroupFile, "utf-8");
 | 
				
			||||||
 | 
					            return new StoreComponent_1.StoreComponent(data, itemgroupFile, ModelComponentType_1.ModelComponentType.ITEMGROUP);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return undefined;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    fileRepresentsItemgroup(file) {
 | 
				
			||||||
 | 
					        return path.basename(path.dirname(file)) === path.parse(path.basename(file)).name;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					exports.ItemLoader = ItemLoader;
 | 
				
			||||||
 | 
					//# sourceMappingURL=ItemLoader.js.map
 | 
				
			||||||
@ -28,6 +28,7 @@ import {TemplateType} from "./project/game-model/templates/TemplateType";
 | 
				
			|||||||
import {TemplateTypeUtilities} from "./project/game-model/templates/TemplateTypeUtilities";
 | 
					import {TemplateTypeUtilities} from "./project/game-model/templates/TemplateTypeUtilities";
 | 
				
			||||||
import {SimpleTemplateGamesystem} from "./project/game-model/templates/simpleGamesystem/SimpleTemplateGamesystem";
 | 
					import {SimpleTemplateGamesystem} from "./project/game-model/templates/simpleGamesystem/SimpleTemplateGamesystem";
 | 
				
			||||||
import {ItemSerializer} from "./project/serializer/ItemSerializer";
 | 
					import {ItemSerializer} from "./project/serializer/ItemSerializer";
 | 
				
			||||||
 | 
					import {ItemgroupParser} from "./project/parser/itemParser/ItemgroupParser";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Component({
 | 
					@Component({
 | 
				
			||||||
  selector: 'app-root',
 | 
					  selector: 'app-root',
 | 
				
			||||||
@ -224,6 +225,11 @@ export class AppComponent implements OnInit{
 | 
				
			|||||||
    const characterParser = new CharacterParser(characterTemplateSystems, characterRelationTemplateSystems, gameModel.scriptAccounts);
 | 
					    const characterParser = new CharacterParser(characterTemplateSystems, characterRelationTemplateSystems, gameModel.scriptAccounts);
 | 
				
			||||||
    gameModel.characters = characterParser.parseCharacters(storedGameModel.storedCharacters)
 | 
					    gameModel.characters = characterParser.parseCharacters(storedGameModel.storedCharacters)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const itemgroupParser = new ItemgroupParser();
 | 
				
			||||||
 | 
					    itemgroupParser.parseItemgroups(storedGameModel.storedItemgroups);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    gameModel.itemgroups = itemgroupParser.getParsedTopItemgroups();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    this.gameModel = gameModel;
 | 
					    this.gameModel = gameModel;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -28,16 +28,6 @@ export class GameModel {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  constructor(gameModelName: string) {
 | 
					  constructor(gameModelName: string) {
 | 
				
			||||||
    this.gameModelName = gameModelName;
 | 
					    this.gameModelName = gameModelName;
 | 
				
			||||||
 | 
					 | 
				
			||||||
    this.addAbstractItemgroup("Clothing", undefined);
 | 
					 | 
				
			||||||
    this.addAbstractItemgroup("Inventory", undefined);
 | 
					 | 
				
			||||||
    this.addConcreteItemgroup("Oberteil", GameModel.findItemgroupByName("Clothing", this.itemgroups)! as AbstractItemGroup);
 | 
					 | 
				
			||||||
    this.addConcreteItemgroup("Hose", GameModel.findItemgroupByName("Clothing", this.itemgroups)! as AbstractItemGroup);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    const item = this.addItem("Hose 1", "Hose");
 | 
					 | 
				
			||||||
    item!.addInheritedGroup(GameModel.findItemgroupByName("Inventory", this.itemgroups!)!)
 | 
					 | 
				
			||||||
    console.log(GameModel.findItemgroupByName("Inventory", this.itemgroups!)!.manuallyInheritedItems)
 | 
					 | 
				
			||||||
    this.addItem("Hose 2", "Hose");
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  addAbstractItemgroup(groupName: string, parentgroup: AbstractItemGroup | undefined) {
 | 
					  addAbstractItemgroup(groupName: string, parentgroup: AbstractItemGroup | undefined) {
 | 
				
			||||||
 | 
				
			|||||||
@ -1,8 +1,88 @@
 | 
				
			|||||||
import {ItemGroup} from "../../game-model/inventory/ItemGroup";
 | 
					import {ItemGroup} from "../../game-model/inventory/ItemGroup";
 | 
				
			||||||
 | 
					import {StoreComponent} from "../../../../../app/storage/StoreComponent";
 | 
				
			||||||
 | 
					import {ItemGroupCharacteristic} from "../../game-model/inventory/ItemgroupCharacteristic";
 | 
				
			||||||
 | 
					import {AbstractItemGroup} from "../../game-model/inventory/AbstractItemGroup";
 | 
				
			||||||
 | 
					import {ModelComponentType} from "../../game-model/ModelComponentType";
 | 
				
			||||||
 | 
					import {ConcreteItemGroup} from "../../game-model/inventory/ConcreteItemGroup";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export class ItemgroupParser {
 | 
					export class ItemgroupParser {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private parsedItemgroups: ItemGroup[] = []
 | 
					  private parsedItemgroups: ItemGroup[] = []
 | 
				
			||||||
 | 
					  private topParsedItemgroups: ItemGroup[] = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  parseItemgroups(storeComponents: StoreComponent[]) {
 | 
				
			||||||
 | 
					    const topologicalSort = this.topologicalSort(storeComponents);
 | 
				
			||||||
 | 
					    topologicalSort.forEach(storeComponent => this.parseSingleItemgroup(storeComponent));
 | 
				
			||||||
 | 
					    return this.parsedItemgroups;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private topologicalSort(storeComponents: StoreComponent[]) {
 | 
				
			||||||
 | 
					    const sortedObjects: StoreComponent[] = []
 | 
				
			||||||
 | 
					    const visited: {[key: string]: boolean} = {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const visit = (object: StoreComponent) => {
 | 
				
			||||||
 | 
					      const jsonData = JSON.parse(object.jsonString)
 | 
				
			||||||
 | 
					      if(visited[jsonData.componentName]) return;
 | 
				
			||||||
 | 
					      visited[jsonData.componentName] = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if(jsonData.parent) {
 | 
				
			||||||
 | 
					        const parentObject = storeComponents.find(obj => JSON.parse(obj.jsonString).componentName === jsonData.parent);
 | 
				
			||||||
 | 
					        if(parentObject) {
 | 
				
			||||||
 | 
					          visit(parentObject);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      sortedObjects.push(object);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    storeComponents.forEach(object => visit(object));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return sortedObjects;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  parseSingleItemgroup(storeComponent: StoreComponent) {
 | 
				
			||||||
 | 
					    const data = JSON.parse(storeComponent.jsonString);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const componentName = data.componentName;
 | 
				
			||||||
 | 
					    const componentDescription = data.componentDescription;
 | 
				
			||||||
 | 
					    const parentgroupName = data.parentgroup;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let itemgroup;
 | 
				
			||||||
 | 
					    if(data.itemgroupType == 0) {
 | 
				
			||||||
 | 
					      itemgroup = new ConcreteItemGroup(componentName, componentDescription, ModelComponentType.ITEMGROUP);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      itemgroup = new AbstractItemGroup(componentName, componentDescription, ModelComponentType.ITEMGROUP);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const parentgroup = this.parsedItemgroups.find(parent => parent.componentName === parentgroupName);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if(parentgroup != undefined) {
 | 
				
			||||||
 | 
					      const abstractParentgroup = parentgroup as AbstractItemGroup;
 | 
				
			||||||
 | 
					      abstractParentgroup.addChildItemgroup(itemgroup)
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      this.parsedItemgroups.push(itemgroup);
 | 
				
			||||||
 | 
					      this.topParsedItemgroups.push(itemgroup);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    this.parseItemgroupCharacteristics(data.itemGroupCharacteristics, itemgroup);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  parseItemgroupCharacteristics(itemgroupCharacteristicsData: any, itemgroup: ItemGroup): ItemGroupCharacteristic[] {
 | 
				
			||||||
 | 
					    const itemgroupCharacteristics: ItemGroupCharacteristic[] = []
 | 
				
			||||||
 | 
					    for(let i=0; i<itemgroupCharacteristicsData.length; i++) {
 | 
				
			||||||
 | 
					      this.parseSingleItemgroupCharacteristic(itemgroupCharacteristicsData[i], itemgroup)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return itemgroupCharacteristics;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private parseSingleItemgroupCharacteristic(itemgroupCharacteristicData: any, itemgroup: ItemGroup) {
 | 
				
			||||||
 | 
					    const name = itemgroupCharacteristicData.characteristicName;
 | 
				
			||||||
 | 
					    const description = itemgroupCharacteristicData.characteristicDescription;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return new ItemGroupCharacteristic(name, description, itemgroup);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  getParsedTopItemgroups() {
 | 
				
			||||||
 | 
					    return this.topParsedItemgroups;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -5,12 +5,13 @@ import {ConcreteItemGroup} from "../game-model/inventory/ConcreteItemGroup";
 | 
				
			|||||||
import {ModelComponentType} from "../game-model/ModelComponentType";
 | 
					import {ModelComponentType} from "../game-model/ModelComponentType";
 | 
				
			||||||
import {SerializeConstants} from "./SerializeConstants";
 | 
					import {SerializeConstants} from "./SerializeConstants";
 | 
				
			||||||
import {Item} from "../game-model/inventory/Item";
 | 
					import {Item} from "../game-model/inventory/Item";
 | 
				
			||||||
 | 
					import {ItemgroupType} from "../game-model/inventory/ItemgroupType";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export class ItemSerializer {
 | 
					export class ItemSerializer {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private serializedItemgroups: StoreComponent[] = []
 | 
					  private serializedItemgroups: StoreComponent[] = []
 | 
				
			||||||
  private serializedItems: StoreComponent[] = []
 | 
					  private serializedItems: StoreComponent[] = []
 | 
				
			||||||
  private static ignoredGroupKeys: string[] = ['type', 'unsaved', 'children', "itemgroup", "manuallyInheritedGroups", "hierarchyInheritedGroups", "items"]
 | 
					  private static ignoredGroupKeys: string[] = ['type', 'unsaved', "itemgroup", "manuallyInheritedGroups", "hierarchyInheritedGroups", "items"]
 | 
				
			||||||
  private static ignoredItemKeys: string[] = ['type', 'unsaved', 'hierarchyInheritedGroups']
 | 
					  private static ignoredItemKeys: string[] = ['type', 'unsaved', 'hierarchyInheritedGroups']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  public serializeItemgroups(itemgroups: ItemGroup[]): StoreComponent[] {
 | 
					  public serializeItemgroups(itemgroups: ItemGroup[]): StoreComponent[] {
 | 
				
			||||||
@ -22,33 +23,59 @@ export class ItemSerializer {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  private serializeSingleItemgroupHierarchy(itemgroup: ItemGroup) {
 | 
					  private serializeSingleItemgroupHierarchy(itemgroup: ItemGroup) {
 | 
				
			||||||
    if(itemgroup instanceof AbstractItemGroup) {
 | 
					    if(itemgroup instanceof AbstractItemGroup) {
 | 
				
			||||||
      const storeComponent = this.serializeItemgroup(itemgroup)
 | 
					      const storeComponent = this.serializeAbstractItemgroup(itemgroup)
 | 
				
			||||||
      this.serializedItemgroups.push(storeComponent)
 | 
					      this.serializedItemgroups.push(storeComponent)
 | 
				
			||||||
      itemgroup.children.forEach(child => this.serializeSingleItemgroupHierarchy(child));
 | 
					      itemgroup.children.forEach(child => this.serializeSingleItemgroupHierarchy(child));
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      const storeComponent = this.serializeItemgroup(itemgroup);
 | 
					      const storeComponent = this.serializeConcreteItemgroup(itemgroup as ConcreteItemGroup);
 | 
				
			||||||
      this.serializedItemgroups.push(storeComponent)
 | 
					      this.serializedItemgroups.push(storeComponent)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      this.serializeItemsOfItemgroup(itemgroup as ConcreteItemGroup);
 | 
					      this.serializeItemsOfItemgroup(itemgroup as ConcreteItemGroup);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private serializeItemgroup(itemgroup: ItemGroup): StoreComponent {
 | 
					  private serializeAbstractItemgroup(itemgroup: AbstractItemGroup): StoreComponent {
 | 
				
			||||||
    const componentType = ModelComponentType.ITEMGROUP;
 | 
					    const componentType = ModelComponentType.ITEMGROUP;
 | 
				
			||||||
    const fileName = ItemSerializer.computeItemgroupPath(itemgroup);
 | 
					    const fileName = ItemSerializer.computeItemgroupPath(itemgroup);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const jsonString = JSON.stringify(itemgroup, (key, value) => {
 | 
					    const jsonObject = {
 | 
				
			||||||
      if(ItemSerializer.ignoredGroupKeys.includes(key)) {
 | 
					      componentName: itemgroup.componentName,
 | 
				
			||||||
        return undefined
 | 
					      componentDescription: itemgroup.componentDescription,
 | 
				
			||||||
      } else {
 | 
					      itemGroupCharacteristics: itemgroup.itemGroupCharacteristics.map(characteristic => {
 | 
				
			||||||
 | 
					        return {
 | 
				
			||||||
 | 
					          characteristicName: characteristic.characteristicName,
 | 
				
			||||||
 | 
					          characteristicDescription: characteristic.characteristicDescription
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }),
 | 
				
			||||||
 | 
					      parentgroup: itemgroup.parentGroup,
 | 
				
			||||||
 | 
					      itemgroupType: ItemgroupType.ABSTRACT
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if(key === 'key') {
 | 
					    const jsonString = JSON.stringify(jsonObject, (key, value) => {
 | 
				
			||||||
          return value.characteristicName
 | 
					 | 
				
			||||||
        } else {
 | 
					 | 
				
			||||||
      return value;
 | 
					      return value;
 | 
				
			||||||
 | 
					    }, SerializeConstants.JSON_INDENT);
 | 
				
			||||||
 | 
					    return new StoreComponent(jsonString, fileName, componentType)
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private serializeConcreteItemgroup(itemgroup: ConcreteItemGroup) {
 | 
				
			||||||
 | 
					    const componentType = ModelComponentType.ITEMGROUP;
 | 
				
			||||||
 | 
					    const fileName = ItemSerializer.computeItemgroupPath(itemgroup);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const jsonObject = {
 | 
				
			||||||
 | 
					      componentName: itemgroup.componentName,
 | 
				
			||||||
 | 
					      componentDescription: itemgroup.componentDescription,
 | 
				
			||||||
 | 
					      itemGroupCharacteristics: itemgroup.itemGroupCharacteristics.map(characteristic => {
 | 
				
			||||||
 | 
					        return {
 | 
				
			||||||
 | 
					          characteristicName: characteristic.characteristicName,
 | 
				
			||||||
 | 
					          characteristicDescription: characteristic.characteristicDescription
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					      }),
 | 
				
			||||||
 | 
					      itemgroupType: ItemgroupType.CONCRETE,
 | 
				
			||||||
 | 
					      parentgroup: itemgroup.parentGroup?.componentName
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const jsonString = JSON.stringify(jsonObject, (key, value) => {
 | 
				
			||||||
 | 
					      return value;
 | 
				
			||||||
    }, SerializeConstants.JSON_INDENT);
 | 
					    }, SerializeConstants.JSON_INDENT);
 | 
				
			||||||
    return new StoreComponent(jsonString, fileName, componentType)
 | 
					    return new StoreComponent(jsonString, fileName, componentType)
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
				
			|||||||
@ -7,6 +7,5 @@
 | 
				
			|||||||
            "characteristicDescription": ""
 | 
					            "characteristicDescription": ""
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "manuallyInheritedItems": [],
 | 
					 | 
				
			||||||
    "itemgroupType": 1
 | 
					    "itemgroupType": 1
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -2,18 +2,6 @@
 | 
				
			|||||||
    "componentName": "Hose",
 | 
					    "componentName": "Hose",
 | 
				
			||||||
    "componentDescription": "",
 | 
					    "componentDescription": "",
 | 
				
			||||||
    "itemGroupCharacteristics": [],
 | 
					    "itemGroupCharacteristics": [],
 | 
				
			||||||
    "manuallyInheritedItems": [],
 | 
					 | 
				
			||||||
    "itemgroupType": 0,
 | 
					    "itemgroupType": 0,
 | 
				
			||||||
    "parentGroup": {
 | 
					    "parentgroup": "Clothing"
 | 
				
			||||||
        "componentName": "Clothing",
 | 
					 | 
				
			||||||
        "componentDescription": "",
 | 
					 | 
				
			||||||
        "itemGroupCharacteristics": [
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                "characteristicName": "Test0",
 | 
					 | 
				
			||||||
                "characteristicDescription": ""
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        ],
 | 
					 | 
				
			||||||
        "manuallyInheritedItems": [],
 | 
					 | 
				
			||||||
        "itemgroupType": 1
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -2,18 +2,6 @@
 | 
				
			|||||||
    "componentName": "Oberteil",
 | 
					    "componentName": "Oberteil",
 | 
				
			||||||
    "componentDescription": "",
 | 
					    "componentDescription": "",
 | 
				
			||||||
    "itemGroupCharacteristics": [],
 | 
					    "itemGroupCharacteristics": [],
 | 
				
			||||||
    "manuallyInheritedItems": [],
 | 
					 | 
				
			||||||
    "itemgroupType": 0,
 | 
					    "itemgroupType": 0,
 | 
				
			||||||
    "parentGroup": {
 | 
					    "parentgroup": "Clothing"
 | 
				
			||||||
        "componentName": "Clothing",
 | 
					 | 
				
			||||||
        "componentDescription": "",
 | 
					 | 
				
			||||||
        "itemGroupCharacteristics": [
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                "characteristicName": "Test0",
 | 
					 | 
				
			||||||
                "characteristicDescription": ""
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        ],
 | 
					 | 
				
			||||||
        "manuallyInheritedItems": [],
 | 
					 | 
				
			||||||
        "itemgroupType": 1
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -7,17 +7,5 @@
 | 
				
			|||||||
            "characteristicDescription": ""
 | 
					            "characteristicDescription": ""
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "manuallyInheritedItems": [
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            "componentName": "Hose 1",
 | 
					 | 
				
			||||||
            "componentDescription": "",
 | 
					 | 
				
			||||||
            "itemCharacteristicValues": [
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    "key": "Test0",
 | 
					 | 
				
			||||||
                    "value": 0
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            ]
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    "itemgroupType": 1
 | 
					    "itemgroupType": 1
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user