@Override
	public Explorable createExplorable(ProcessConfiguration config, IdGenerator idGenerator, Explorable origin, String type, Object... params) throws ExplorationException {
		if (log.isLoggable(Level.FINEST)) log.finest("org.opencompare.explorable.RootFactory.newExplorable2(" + origin + ", " + type + ", " + Arrays.toString(params) + ")");
		if (type.equals(TYPE_PROPERTY)) {
			return new Property(
					idGenerator.nextId(),				// int id 
					origin.getId(), 										// int parentId
					(String) params[0] == null ? "" : (String) params[0], 	// String name
					(String) params[1] == null ? "" : (String) params[1]	// String value
				);
		} else if (type.equals(TYPE_CONFLICT)) {
			Integer optionalId = (Integer) params[0];
			return new Conflict(
					optionalId > 0 ? optionalId : idGenerator.nextId(),	// int id 
					(Integer) params[1], 														// int parentId
					(Explorable) params[2], 													// Explorable reference
					(Explorable) params[3], 													// Explorable actual
					(ConflictType) params[4], 													// ConflictType type
					(String) params[5]															// String comment
				);
		} else if (type.equals(TYPE_ROOT)) {
			return new Root();
		} else {
			throw new ExplorationException("Unsupported type: " + type);
		}
	}