mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-07 21:01:03 +00:00
Implemented dimensions for TrackedLegOfCompetitor
This commit is contained in:
1 parent
38c48f4751
commit
f2904c03fe
4 files changed
+274
-146
No files matched your search
+8
-8
@@ -8,6 +8,8 @@ import java.util.Map.Entry;
|
||||
|
||||
import com.sap.sailing.datamining.data.GPSFixWithContext;
|
||||
import com.sap.sailing.datamining.data.TrackedLegOfCompetitorWithContext;
|
||||
import com.sap.sailing.datamining.dimensions.GPSFixDimensionsManager;
|
||||
import com.sap.sailing.datamining.dimensions.TrackedLegOfCompetitorDimensionsManager;
|
||||
import com.sap.sailing.datamining.impl.DataAmountExtractor;
|
||||
import com.sap.sailing.datamining.impl.DynamicGrouper;
|
||||
import com.sap.sailing.datamining.impl.FilterByCriteria;
|
||||
@@ -111,11 +113,9 @@ public class DataMiningFactory {
|
||||
return compoundFilterCriteria;
|
||||
}
|
||||
|
||||
private static <ValueType> FilterCriteria<TrackedLegOfCompetitorWithContext> createTrackedLegOfCompetitorDimensionFilterCriteria(SharedDimension key, Iterable<?> values) {
|
||||
//TODO fill the dimension, after the hierarchical dimensions has been implemented
|
||||
throw new UnsupportedOperationException("Not yet implemented");
|
||||
// Dimension<TrackedLegOfCompetitorWithContext, ValueType> dimension = null;
|
||||
// return createDimensionFilterCriteria(dimension, values);
|
||||
private static <ValueType> FilterCriteria<TrackedLegOfCompetitorWithContext> createTrackedLegOfCompetitorDimensionFilterCriteria(SharedDimension sharedDimension, Iterable<?> values) {
|
||||
Dimension<TrackedLegOfCompetitorWithContext, ValueType> dimension = TrackedLegOfCompetitorDimensionsManager.getDimensionFor(sharedDimension);
|
||||
return createDimensionFilterCriteria(dimension, values);
|
||||
}
|
||||
|
||||
public static FilterCriteria<GPSFixWithContext> createGPSFixDimensionFilterCriteria(Map<SharedDimension, Iterable<?>> selection) {
|
||||
@@ -127,8 +127,8 @@ public class DataMiningFactory {
|
||||
return compoundFilterCriteria;
|
||||
}
|
||||
|
||||
public static <ValueType> FilterCriteria<GPSFixWithContext> createGPSFixDimensionFilterCriteria(SharedDimension gpsFix, Iterable<?> values) {
|
||||
Dimension<GPSFixWithContext, ValueType> dimension = Dimensions.GPSFix.getDimensionFor(gpsFix);
|
||||
public static <ValueType> FilterCriteria<GPSFixWithContext> createGPSFixDimensionFilterCriteria(SharedDimension sharedDimension, Iterable<?> values) {
|
||||
Dimension<GPSFixWithContext, ValueType> dimension = GPSFixDimensionsManager.getDimensionFor(sharedDimension);
|
||||
return createDimensionFilterCriteria(dimension, values);
|
||||
}
|
||||
|
||||
@@ -176,7 +176,7 @@ public class DataMiningFactory {
|
||||
public static <ValueType> Grouper<GPSFixWithContext> createGPSFixByDimensionGrouper(Collection<SharedDimension> dimensionsToGroupBy) {
|
||||
Collection<Dimension<GPSFixWithContext, ValueType>> dimensions = new LinkedHashSet<Dimension<GPSFixWithContext, ValueType>>();
|
||||
for (SharedDimension dimensionType : dimensionsToGroupBy) {
|
||||
Dimension<GPSFixWithContext, ValueType> dimension = Dimensions.GPSFix.getDimensionFor(dimensionType);
|
||||
Dimension<GPSFixWithContext, ValueType> dimension = GPSFixDimensionsManager.getDimensionFor(dimensionType);
|
||||
dimensions.add(dimension);
|
||||
}
|
||||
return new GroupGPSFixesByDimension<ValueType>(dimensions);
|
||||
|
||||
@@ -1,138 +0,0 @@
|
||||
package com.sap.sailing.datamining;
|
||||
|
||||
import com.sap.sailing.datamining.data.GPSFixWithContext;
|
||||
import com.sap.sailing.datamining.impl.AbstractDimension;
|
||||
import com.sap.sailing.datamining.shared.SharedDimension;
|
||||
import com.sap.sailing.domain.common.LegType;
|
||||
|
||||
public class Dimensions {
|
||||
|
||||
private Dimensions() { }
|
||||
|
||||
public static class GPSFix {
|
||||
|
||||
private GPSFix() { }
|
||||
|
||||
public final static Dimension<GPSFixWithContext, String> RegattaName = new AbstractDimension<GPSFixWithContext, String>("Regatta") {
|
||||
@Override
|
||||
public String getDimensionValueFrom(GPSFixWithContext data) {
|
||||
return data.getRegattaName();
|
||||
}
|
||||
};
|
||||
|
||||
public final static Dimension<GPSFixWithContext, String> RaceName = new AbstractDimension<GPSFixWithContext, String>("Race") {
|
||||
@Override
|
||||
public String getDimensionValueFrom(GPSFixWithContext data) {
|
||||
return data.getRaceName();
|
||||
}
|
||||
};
|
||||
|
||||
public final static Dimension<GPSFixWithContext, Integer> LegNumber = new AbstractDimension<GPSFixWithContext, Integer>("Leg Number") {
|
||||
@Override
|
||||
public Integer getDimensionValueFrom(GPSFixWithContext data) {
|
||||
return data.getLegNumber();
|
||||
}
|
||||
};
|
||||
|
||||
public final static Dimension<GPSFixWithContext, String> CourseAreaName = new AbstractDimension<GPSFixWithContext, String>("Course Area") {
|
||||
@Override
|
||||
public String getDimensionValueFrom(GPSFixWithContext data) {
|
||||
return data.getCourseAreaName();
|
||||
}
|
||||
};
|
||||
|
||||
public final static Dimension<GPSFixWithContext, String> FleetName = new AbstractDimension<GPSFixWithContext, String>("Fleet") {
|
||||
@Override
|
||||
public String getDimensionValueFrom(GPSFixWithContext data) {
|
||||
return data.getFleetName();
|
||||
}
|
||||
};
|
||||
|
||||
public final static Dimension<GPSFixWithContext, String> BoatClassName = new AbstractDimension<GPSFixWithContext, String>("Boat Class") {
|
||||
@Override
|
||||
public String getDimensionValueFrom(GPSFixWithContext data) {
|
||||
return data.getBoatClassName();
|
||||
}
|
||||
};
|
||||
|
||||
public final static Dimension<GPSFixWithContext, Integer> Year = new AbstractDimension<GPSFixWithContext, Integer>("Year") {
|
||||
@Override
|
||||
public Integer getDimensionValueFrom(GPSFixWithContext data) {
|
||||
return data.getYear();
|
||||
}
|
||||
};
|
||||
|
||||
public final static Dimension<GPSFixWithContext, LegType> LegType = new AbstractDimension<GPSFixWithContext, LegType>("Leg Type") {
|
||||
@Override
|
||||
public LegType getDimensionValueFrom(GPSFixWithContext data) {
|
||||
return data.getLegType();
|
||||
}
|
||||
};
|
||||
|
||||
public final static Dimension<GPSFixWithContext, String> CompetitorName = new AbstractDimension<GPSFixWithContext, String>("Competitor") {
|
||||
@Override
|
||||
public String getDimensionValueFrom(GPSFixWithContext data) {
|
||||
return data.getCompetitorName();
|
||||
}
|
||||
};
|
||||
|
||||
public final static Dimension<GPSFixWithContext, String> SailID = new AbstractDimension<GPSFixWithContext, String>("Sail ID") {
|
||||
@Override
|
||||
public String getDimensionValueFrom(GPSFixWithContext data) {
|
||||
return data.getCompetitorSailID();
|
||||
}
|
||||
};
|
||||
|
||||
public final static Dimension<GPSFixWithContext, String> Nationality = new AbstractDimension<GPSFixWithContext, String>("Nationality") {
|
||||
@Override
|
||||
public String getDimensionValueFrom(GPSFixWithContext data) {
|
||||
return data.getCompetitorNationality();
|
||||
}
|
||||
};
|
||||
|
||||
//TODO after new clusters
|
||||
public final static Dimension<GPSFixWithContext, String> WindStrength = new AbstractDimension<GPSFixWithContext, String>("Wind Strength") {
|
||||
@Override
|
||||
public String getDimensionValueFrom(GPSFixWithContext data) {
|
||||
return data.getWindStrength().getName();
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* @return The dimension for the given dimension type. Throws an exception, if the used <code>ValueType</code> doesn't match the <code>ValueType</code> of the returning dimension.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <ValueType> Dimension<GPSFixWithContext, ValueType> getDimensionFor(SharedDimension dimension) {
|
||||
switch (dimension) {
|
||||
case BoatClassName:
|
||||
return (Dimension<GPSFixWithContext, ValueType>) BoatClassName;
|
||||
case CompetitorName:
|
||||
return (Dimension<GPSFixWithContext, ValueType>) CompetitorName;
|
||||
case CourseAreaName:
|
||||
return (Dimension<GPSFixWithContext, ValueType>) CourseAreaName;
|
||||
case FleetName:
|
||||
return (Dimension<GPSFixWithContext, ValueType>) FleetName;
|
||||
case LegNumber:
|
||||
return (Dimension<GPSFixWithContext, ValueType>) LegNumber;
|
||||
case LegType:
|
||||
return (Dimension<GPSFixWithContext, ValueType>) LegType;
|
||||
case Nationality:
|
||||
return (Dimension<GPSFixWithContext, ValueType>) Nationality;
|
||||
case RaceName:
|
||||
return (Dimension<GPSFixWithContext, ValueType>) RaceName;
|
||||
case RegattaName:
|
||||
return (Dimension<GPSFixWithContext, ValueType>) RegattaName;
|
||||
case SailID:
|
||||
return (Dimension<GPSFixWithContext, ValueType>) SailID;
|
||||
case WindStrength:
|
||||
return (Dimension<GPSFixWithContext, ValueType>) WindStrength;
|
||||
case Year:
|
||||
return (Dimension<GPSFixWithContext, ValueType>) Year;
|
||||
}
|
||||
throw new IllegalArgumentException("Not yet implemented for the given dimension: "
|
||||
+ dimension.toString());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
+133
@@ -0,0 +1,133 @@
|
||||
package com.sap.sailing.datamining.dimensions;
|
||||
|
||||
import com.sap.sailing.datamining.Dimension;
|
||||
import com.sap.sailing.datamining.data.GPSFixWithContext;
|
||||
import com.sap.sailing.datamining.impl.AbstractDimension;
|
||||
import com.sap.sailing.datamining.shared.SharedDimension;
|
||||
import com.sap.sailing.domain.common.LegType;
|
||||
|
||||
public class GPSFixDimensionsManager {
|
||||
|
||||
private GPSFixDimensionsManager() { }
|
||||
|
||||
public final static Dimension<GPSFixWithContext, String> RegattaName = new AbstractDimension<GPSFixWithContext, String>("Regatta") {
|
||||
@Override
|
||||
public String getDimensionValueFrom(GPSFixWithContext data) {
|
||||
return data.getRegattaName();
|
||||
}
|
||||
};
|
||||
|
||||
public final static Dimension<GPSFixWithContext, String> RaceName = new AbstractDimension<GPSFixWithContext, String>("Race") {
|
||||
@Override
|
||||
public String getDimensionValueFrom(GPSFixWithContext data) {
|
||||
return data.getRaceName();
|
||||
}
|
||||
};
|
||||
|
||||
public final static Dimension<GPSFixWithContext, Integer> LegNumber = new AbstractDimension<GPSFixWithContext, Integer>("Leg Number") {
|
||||
@Override
|
||||
public Integer getDimensionValueFrom(GPSFixWithContext data) {
|
||||
return data.getLegNumber();
|
||||
}
|
||||
};
|
||||
|
||||
public final static Dimension<GPSFixWithContext, String> CourseAreaName = new AbstractDimension<GPSFixWithContext, String>("Course Area") {
|
||||
@Override
|
||||
public String getDimensionValueFrom(GPSFixWithContext data) {
|
||||
return data.getCourseAreaName();
|
||||
}
|
||||
};
|
||||
|
||||
public final static Dimension<GPSFixWithContext, String> FleetName = new AbstractDimension<GPSFixWithContext, String>("Fleet") {
|
||||
@Override
|
||||
public String getDimensionValueFrom(GPSFixWithContext data) {
|
||||
return data.getFleetName();
|
||||
}
|
||||
};
|
||||
|
||||
public final static Dimension<GPSFixWithContext, String> BoatClassName = new AbstractDimension<GPSFixWithContext, String>("Boat Class") {
|
||||
@Override
|
||||
public String getDimensionValueFrom(GPSFixWithContext data) {
|
||||
return data.getBoatClassName();
|
||||
}
|
||||
};
|
||||
|
||||
public final static Dimension<GPSFixWithContext, Integer> Year = new AbstractDimension<GPSFixWithContext, Integer>("Year") {
|
||||
@Override
|
||||
public Integer getDimensionValueFrom(GPSFixWithContext data) {
|
||||
return data.getYear();
|
||||
}
|
||||
};
|
||||
|
||||
public final static Dimension<GPSFixWithContext, LegType> LegType = new AbstractDimension<GPSFixWithContext, LegType>("Leg Type") {
|
||||
@Override
|
||||
public LegType getDimensionValueFrom(GPSFixWithContext data) {
|
||||
return data.getLegType();
|
||||
}
|
||||
};
|
||||
|
||||
public final static Dimension<GPSFixWithContext, String> CompetitorName = new AbstractDimension<GPSFixWithContext, String>("Competitor") {
|
||||
@Override
|
||||
public String getDimensionValueFrom(GPSFixWithContext data) {
|
||||
return data.getCompetitorName();
|
||||
}
|
||||
};
|
||||
|
||||
public final static Dimension<GPSFixWithContext, String> SailID = new AbstractDimension<GPSFixWithContext, String>("Sail ID") {
|
||||
@Override
|
||||
public String getDimensionValueFrom(GPSFixWithContext data) {
|
||||
return data.getCompetitorSailID();
|
||||
}
|
||||
};
|
||||
|
||||
public final static Dimension<GPSFixWithContext, String> Nationality = new AbstractDimension<GPSFixWithContext, String>("Nationality") {
|
||||
@Override
|
||||
public String getDimensionValueFrom(GPSFixWithContext data) {
|
||||
return data.getCompetitorNationality();
|
||||
}
|
||||
};
|
||||
|
||||
//TODO after new clusters
|
||||
public final static Dimension<GPSFixWithContext, String> WindStrength = new AbstractDimension<GPSFixWithContext, String>("Wind Strength") {
|
||||
@Override
|
||||
public String getDimensionValueFrom(GPSFixWithContext data) {
|
||||
return data.getWindStrength().getName();
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* @return The dimension for the given dimension type. Throws an exception, if the used <code>ValueType</code> doesn't match the <code>ValueType</code> of the returning dimension.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <ValueType> Dimension<GPSFixWithContext, ValueType> getDimensionFor(SharedDimension dimension) {
|
||||
switch (dimension) {
|
||||
case BoatClassName:
|
||||
return (Dimension<GPSFixWithContext, ValueType>) BoatClassName;
|
||||
case CompetitorName:
|
||||
return (Dimension<GPSFixWithContext, ValueType>) CompetitorName;
|
||||
case CourseAreaName:
|
||||
return (Dimension<GPSFixWithContext, ValueType>) CourseAreaName;
|
||||
case FleetName:
|
||||
return (Dimension<GPSFixWithContext, ValueType>) FleetName;
|
||||
case LegNumber:
|
||||
return (Dimension<GPSFixWithContext, ValueType>) LegNumber;
|
||||
case LegType:
|
||||
return (Dimension<GPSFixWithContext, ValueType>) LegType;
|
||||
case Nationality:
|
||||
return (Dimension<GPSFixWithContext, ValueType>) Nationality;
|
||||
case RaceName:
|
||||
return (Dimension<GPSFixWithContext, ValueType>) RaceName;
|
||||
case RegattaName:
|
||||
return (Dimension<GPSFixWithContext, ValueType>) RegattaName;
|
||||
case SailID:
|
||||
return (Dimension<GPSFixWithContext, ValueType>) SailID;
|
||||
case WindStrength:
|
||||
return (Dimension<GPSFixWithContext, ValueType>) WindStrength;
|
||||
case Year:
|
||||
return (Dimension<GPSFixWithContext, ValueType>) Year;
|
||||
}
|
||||
throw new IllegalArgumentException("Not yet implemented for the given dimension: "
|
||||
+ dimension.toString());
|
||||
}
|
||||
|
||||
}
|
||||
+133
@@ -0,0 +1,133 @@
|
||||
package com.sap.sailing.datamining.dimensions;
|
||||
|
||||
import com.sap.sailing.datamining.Dimension;
|
||||
import com.sap.sailing.datamining.data.TrackedLegOfCompetitorWithContext;
|
||||
import com.sap.sailing.datamining.impl.AbstractDimension;
|
||||
import com.sap.sailing.datamining.shared.SharedDimension;
|
||||
import com.sap.sailing.domain.common.LegType;
|
||||
|
||||
public class TrackedLegOfCompetitorDimensionsManager {
|
||||
|
||||
private TrackedLegOfCompetitorDimensionsManager() { }
|
||||
|
||||
public final static Dimension<TrackedLegOfCompetitorWithContext, String> RegattaName = new AbstractDimension<TrackedLegOfCompetitorWithContext, String>("Regatta") {
|
||||
@Override
|
||||
public String getDimensionValueFrom(TrackedLegOfCompetitorWithContext data) {
|
||||
return data.getRegattaName();
|
||||
}
|
||||
};
|
||||
|
||||
public final static Dimension<TrackedLegOfCompetitorWithContext, String> RaceName = new AbstractDimension<TrackedLegOfCompetitorWithContext, String>("Race") {
|
||||
@Override
|
||||
public String getDimensionValueFrom(TrackedLegOfCompetitorWithContext data) {
|
||||
return data.getRaceName();
|
||||
}
|
||||
};
|
||||
|
||||
public final static Dimension<TrackedLegOfCompetitorWithContext, Integer> LegNumber = new AbstractDimension<TrackedLegOfCompetitorWithContext, Integer>("Leg Number") {
|
||||
@Override
|
||||
public Integer getDimensionValueFrom(TrackedLegOfCompetitorWithContext data) {
|
||||
return data.getLegNumber();
|
||||
}
|
||||
};
|
||||
|
||||
public final static Dimension<TrackedLegOfCompetitorWithContext, String> CourseAreaName = new AbstractDimension<TrackedLegOfCompetitorWithContext, String>("Course Area") {
|
||||
@Override
|
||||
public String getDimensionValueFrom(TrackedLegOfCompetitorWithContext data) {
|
||||
return data.getCourseAreaName();
|
||||
}
|
||||
};
|
||||
|
||||
public final static Dimension<TrackedLegOfCompetitorWithContext, String> FleetName = new AbstractDimension<TrackedLegOfCompetitorWithContext, String>("Fleet") {
|
||||
@Override
|
||||
public String getDimensionValueFrom(TrackedLegOfCompetitorWithContext data) {
|
||||
return data.getFleetName();
|
||||
}
|
||||
};
|
||||
|
||||
public final static Dimension<TrackedLegOfCompetitorWithContext, String> BoatClassName = new AbstractDimension<TrackedLegOfCompetitorWithContext, String>("Boat Class") {
|
||||
@Override
|
||||
public String getDimensionValueFrom(TrackedLegOfCompetitorWithContext data) {
|
||||
return data.getBoatClassName();
|
||||
}
|
||||
};
|
||||
|
||||
public final static Dimension<TrackedLegOfCompetitorWithContext, Integer> Year = new AbstractDimension<TrackedLegOfCompetitorWithContext, Integer>("Year") {
|
||||
@Override
|
||||
public Integer getDimensionValueFrom(TrackedLegOfCompetitorWithContext data) {
|
||||
return data.getYear();
|
||||
}
|
||||
};
|
||||
|
||||
public final static Dimension<TrackedLegOfCompetitorWithContext, LegType> LegType = new AbstractDimension<TrackedLegOfCompetitorWithContext, LegType>("Leg Type") {
|
||||
@Override
|
||||
public LegType getDimensionValueFrom(TrackedLegOfCompetitorWithContext data) {
|
||||
return data.getLegType();
|
||||
}
|
||||
};
|
||||
|
||||
public final static Dimension<TrackedLegOfCompetitorWithContext, String> CompetitorName = new AbstractDimension<TrackedLegOfCompetitorWithContext, String>("Competitor") {
|
||||
@Override
|
||||
public String getDimensionValueFrom(TrackedLegOfCompetitorWithContext data) {
|
||||
return data.getCompetitorName();
|
||||
}
|
||||
};
|
||||
|
||||
public final static Dimension<TrackedLegOfCompetitorWithContext, String> SailID = new AbstractDimension<TrackedLegOfCompetitorWithContext, String>("Sail ID") {
|
||||
@Override
|
||||
public String getDimensionValueFrom(TrackedLegOfCompetitorWithContext data) {
|
||||
return data.getCompetitorSailID();
|
||||
}
|
||||
};
|
||||
|
||||
public final static Dimension<TrackedLegOfCompetitorWithContext, String> Nationality = new AbstractDimension<TrackedLegOfCompetitorWithContext, String>("Nationality") {
|
||||
@Override
|
||||
public String getDimensionValueFrom(TrackedLegOfCompetitorWithContext data) {
|
||||
return data.getCompetitorNationality();
|
||||
}
|
||||
};
|
||||
|
||||
//TODO after new clusters
|
||||
public final static Dimension<TrackedLegOfCompetitorWithContext, String> WindStrength = new AbstractDimension<TrackedLegOfCompetitorWithContext, String>("Wind Strength") {
|
||||
@Override
|
||||
public String getDimensionValueFrom(TrackedLegOfCompetitorWithContext data) {
|
||||
return data.getWindStrength().getName();
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* @return The dimension for the given dimension type. Throws an exception, if the used <code>ValueType</code> doesn't match the <code>ValueType</code> of the returning dimension.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <ValueType> Dimension<TrackedLegOfCompetitorWithContext, ValueType> getDimensionFor(SharedDimension dimension) {
|
||||
switch (dimension) {
|
||||
case BoatClassName:
|
||||
return (Dimension<TrackedLegOfCompetitorWithContext, ValueType>) BoatClassName;
|
||||
case CompetitorName:
|
||||
return (Dimension<TrackedLegOfCompetitorWithContext, ValueType>) CompetitorName;
|
||||
case CourseAreaName:
|
||||
return (Dimension<TrackedLegOfCompetitorWithContext, ValueType>) CourseAreaName;
|
||||
case FleetName:
|
||||
return (Dimension<TrackedLegOfCompetitorWithContext, ValueType>) FleetName;
|
||||
case LegNumber:
|
||||
return (Dimension<TrackedLegOfCompetitorWithContext, ValueType>) LegNumber;
|
||||
case LegType:
|
||||
return (Dimension<TrackedLegOfCompetitorWithContext, ValueType>) LegType;
|
||||
case Nationality:
|
||||
return (Dimension<TrackedLegOfCompetitorWithContext, ValueType>) Nationality;
|
||||
case RaceName:
|
||||
return (Dimension<TrackedLegOfCompetitorWithContext, ValueType>) RaceName;
|
||||
case RegattaName:
|
||||
return (Dimension<TrackedLegOfCompetitorWithContext, ValueType>) RegattaName;
|
||||
case SailID:
|
||||
return (Dimension<TrackedLegOfCompetitorWithContext, ValueType>) SailID;
|
||||
case WindStrength:
|
||||
return (Dimension<TrackedLegOfCompetitorWithContext, ValueType>) WindStrength;
|
||||
case Year:
|
||||
return (Dimension<TrackedLegOfCompetitorWithContext, ValueType>) Year;
|
||||
}
|
||||
throw new IllegalArgumentException("Not yet implemented for the given dimension: "
|
||||
+ dimension.toString());
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user