Skip to content

Commit bd3073a

Browse files
authored
[API 7] SubCategories (#68)
* Feat: SubCategory * cleanup * Feat: Event SubCategory * Feat: Connector SubCategory * Rename iconRelativePath to imagepath * SubCategory directly inside Parent Category
1 parent b034dd9 commit bd3073a

File tree

18 files changed

+242
-12
lines changed

18 files changed

+242
-12
lines changed

Annotations/src/main/java/com/christophecvb/touchportal/annotations/Action.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,13 @@
120120
*/
121121
String categoryId();
122122

123+
/**
124+
* Action subCategoryId
125+
*
126+
* @return String subCategoryId
127+
*/
128+
String subCategoryId() default "";
129+
123130
/**
124131
* Action hasHoldFunctionality
125132
* <p>

Annotations/src/main/java/com/christophecvb/touchportal/annotations/Category.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,4 +65,12 @@
6565
* @return String imagePath
6666
*/
6767
String imagePath() default "";
68+
69+
SubCategory[] subCategories() default {};
70+
71+
@interface SubCategory {
72+
String id();
73+
String name();
74+
String imagePath() default "";
75+
}
6876
}

Annotations/src/main/java/com/christophecvb/touchportal/annotations/Connector.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,4 +86,11 @@
8686
* @return String categoryId
8787
*/
8888
String categoryId();
89+
90+
/**
91+
* Connector subConnectorId
92+
*
93+
* @return String subConnectorId
94+
*/
95+
String subCategoryId() default "";
8996
}

Annotations/src/main/java/com/christophecvb/touchportal/annotations/Event.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,4 +75,11 @@
7575
* @return String[] valueChoices
7676
*/
7777
String[] valueChoices() default {};
78+
79+
/**
80+
* Event subCategoryId
81+
*
82+
* @return String subCategoryId
83+
*/
84+
String subCategoryId() default "";
7885
}

AnnotationsProcessor/src/main/java/com/christophecvb/touchportal/annotations/processor/ActionProcessor.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.christophecvb.touchportal.annotations.processor.utils.SpecUtils;
66
import com.christophecvb.touchportal.helpers.ActionHelper;
77
import com.christophecvb.touchportal.helpers.GenericHelper;
8+
import com.christophecvb.touchportal.helpers.SubCategoryHelper;
89
import com.google.gson.JsonArray;
910
import com.google.gson.JsonObject;
1011
import com.squareup.javapoet.TypeSpec;
@@ -35,7 +36,12 @@ public static Pair<JsonObject, TypeSpec.Builder> process(TouchPortalPluginAnnota
3536
TypeSpec.Builder actionTypeSpecBuilder = SpecUtils.createActionTypeSpecBuilder(pluginElement, categoryElement, category, actionElement, action);
3637

3738
JsonObject jsonAction = new JsonObject();
38-
jsonAction.addProperty(ActionHelper.ID, ActionHelper.getActionId(pluginElement, categoryElement, category, actionElement, action));
39+
if (!action.subCategoryId().isEmpty()) {
40+
jsonAction.addProperty(ActionHelper.ID, ActionHelper.getActionId(pluginElement, categoryElement, category, action.subCategoryId(), actionElement, action));
41+
jsonAction.addProperty(ActionHelper.SUB_CATEGORY_ID, SubCategoryHelper.getSubCategoryId(pluginElement, categoryElement, category, action.subCategoryId()));
42+
} else {
43+
jsonAction.addProperty(ActionHelper.ID, ActionHelper.getActionId(pluginElement, categoryElement, category, actionElement, action));
44+
}
3945
jsonAction.addProperty(ActionHelper.NAME, ActionHelper.getActionName(actionElement, action));
4046
jsonAction.addProperty(ActionHelper.PREFIX, action.prefix());
4147
jsonAction.addProperty(ActionHelper.TYPE, action.type());

AnnotationsProcessor/src/main/java/com/christophecvb/touchportal/annotations/processor/CategoryProcessor.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,14 @@ public static Pair<JsonObject, TypeSpec.Builder> process(TouchPortalPluginAnnota
4040
jsonCategory.addProperty(CategoryHelper.NAME, CategoryHelper.getCategoryName(categoryElement, category));
4141
jsonCategory.addProperty(CategoryHelper.IMAGE_PATH, PluginHelper.TP_PLUGIN_FOLDER + pluginElement.getSimpleName() + "/" + category.imagePath());
4242

43+
JsonArray jsonSubCategories = new JsonArray();
44+
for (Category.SubCategory subCategory : category.subCategories()) {
45+
Pair<JsonObject, TypeSpec.Builder> subCategoriesResult = SubCategoryProcessor.process(processor, pluginElement, category, categoryElement, subCategory);
46+
jsonSubCategories.add(subCategoriesResult.first);
47+
categoryTypeSpecBuilder.addType(subCategoriesResult.second.build());
48+
}
49+
jsonCategory.add(CategoryHelper.SUB_CATEGORIES, jsonSubCategories);
50+
4351
TypeSpec.Builder actionsTypeSpecBuilder = TypeSpec.classBuilder("Actions").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
4452
JsonArray jsonActions = new JsonArray();
4553
Set<? extends Element> actionElements = roundEnv.getElementsAnnotatedWith(Action.class);

AnnotationsProcessor/src/main/java/com/christophecvb/touchportal/annotations/processor/ConnectorProcessor.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,12 @@ public static Pair<JsonObject, TypeSpec.Builder> process(TouchPortalPluginAnnota
3737
TypeSpec.Builder connectorTypeSpecBuilder = SpecUtils.createConnectorTypeSpecBuilder(pluginElement, categoryElement, category, connectorElement, connector);
3838

3939
JsonObject jsonConnector = new JsonObject();
40-
jsonConnector.addProperty(ConnectorHelper.ID, ConnectorHelper.getConnectorId(pluginElement, categoryElement, category, connectorElement, connector));
40+
if (!connector.subCategoryId().isEmpty()){
41+
jsonConnector.addProperty(ConnectorHelper.ID, ConnectorHelper.getConnectorId(pluginElement, categoryElement, category, connectorElement, connector));
42+
jsonConnector.addProperty(ConnectorHelper.SUB_CATEGORY_ID, ConnectorHelper.getConnectorId(pluginElement, categoryElement, category, connector.subCategoryId(), connectorElement, connector));
43+
} else {
44+
jsonConnector.addProperty(ConnectorHelper.ID, ConnectorHelper.getConnectorId(pluginElement, categoryElement, category, connectorElement, connector));
45+
}
4146
jsonConnector.addProperty(ConnectorHelper.NAME, ConnectorHelper.getConnectorName(connectorElement, connector));
4247
jsonConnector.addProperty(ConnectorHelper.FORMAT, connector.format());
4348

AnnotationsProcessor/src/main/java/com/christophecvb/touchportal/annotations/processor/EventProcessor.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import com.christophecvb.touchportal.helpers.EventHelper;
1010
import com.christophecvb.touchportal.helpers.GenericHelper;
1111
import com.christophecvb.touchportal.helpers.StateHelper;
12+
import com.christophecvb.touchportal.helpers.SubCategoryHelper;
1213
import com.google.gson.JsonArray;
1314
import com.google.gson.JsonObject;
1415
import com.squareup.javapoet.TypeSpec;
@@ -46,10 +47,16 @@ public static Pair<JsonObject, TypeSpec.Builder> process(TouchPortalPluginAnnota
4647
TypeSpec.Builder eventTypeSpecBuilder = SpecUtils.createEventTypeSpecBuilder(pluginElement, categoryElement, category, eventElement, event);
4748

4849
JsonObject jsonEvent = new JsonObject();
49-
jsonEvent.addProperty(EventHelper.ID, EventHelper.getEventId(pluginElement, categoryElement, category, eventElement, event));
50+
if (!event.subCategoryId().isEmpty()) {
51+
jsonEvent.addProperty(EventHelper.ID, EventHelper.getEventId(pluginElement, categoryElement, category, event.subCategoryId(), eventElement, event));
52+
jsonEvent.addProperty(EventHelper.SUB_CATEGORY_ID, SubCategoryHelper.getSubCategoryId(pluginElement, categoryElement, category, event.subCategoryId()));
53+
} else {
54+
jsonEvent.addProperty(EventHelper.ID, EventHelper.getEventId(pluginElement, categoryElement, category, eventElement, event));
55+
}
5056
jsonEvent.addProperty(EventHelper.TYPE, EventHelper.TYPE_COMMUNICATE);
5157
jsonEvent.addProperty(EventHelper.NAME, EventHelper.getEventName(eventElement, event));
5258
jsonEvent.addProperty(EventHelper.FORMAT, event.format());
59+
5360
String desiredTPType = GenericHelper.getTouchPortalType(reference, eventElement);
5461
if (desiredTPType.equals(StateHelper.TYPE_TEXT)) {
5562
jsonEvent.addProperty(EventHelper.VALUE_TYPE, EventHelper.VALUE_TYPE_CHOICE);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.christophecvb.touchportal.annotations.processor;
2+
3+
import com.christophecvb.touchportal.annotations.Category;
4+
import com.christophecvb.touchportal.annotations.processor.utils.Pair;
5+
import com.christophecvb.touchportal.annotations.processor.utils.SpecUtils;
6+
import com.christophecvb.touchportal.helpers.SubCategoryHelper;
7+
import com.google.gson.JsonObject;
8+
import com.squareup.javapoet.TypeSpec;
9+
10+
import javax.lang.model.element.Element;
11+
import javax.lang.model.element.Modifier;
12+
import javax.tools.Diagnostic;
13+
14+
public class SubCategoryProcessor {
15+
16+
public static Pair<JsonObject, TypeSpec.Builder> process(TouchPortalPluginAnnotationsProcessor processor, Element pluginElement, Category category, Element categoryElement, Category.SubCategory subCategory) {
17+
processor.getMessager().printMessage(Diagnostic.Kind.NOTE, "Process SubCategory: " + subCategory.id());
18+
19+
TypeSpec.Builder categoryTypeSpecBuilder = SpecUtils.createSubCategoryTypeSpecBuilder(pluginElement, categoryElement, category, subCategory).addModifiers(Modifier.PUBLIC, Modifier.STATIC);
20+
21+
JsonObject jsonSubCategory = new JsonObject();
22+
23+
jsonSubCategory.addProperty(SubCategoryHelper.ID, SubCategoryHelper.getSubCategoryId(pluginElement, categoryElement, category, subCategory));
24+
jsonSubCategory.addProperty(SubCategoryHelper.NAME, subCategory.name());
25+
if (!subCategory.imagePath().isEmpty()) {
26+
jsonSubCategory.addProperty(SubCategoryHelper.IMAGE_PATH, subCategory.imagePath());
27+
}
28+
29+
return Pair.create(jsonSubCategory, categoryTypeSpecBuilder);
30+
}
31+
}

AnnotationsProcessor/src/main/java/com/christophecvb/touchportal/annotations/processor/utils/SpecUtils.java

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,26 @@ public static TypeSpec.Builder createCategoryTypeSpecBuilder(Element pluginEleme
5959
return categoryTypeSpecBuilder;
6060
}
6161

62+
63+
/**
64+
* Generates a TypeSpec.Builder with Constants for the {@link Category.SubCategory}
65+
*
66+
* @param pluginElement Element
67+
* @param categoryElement Element
68+
* @param category {@link Category}
69+
* @param subCategory {@link Category.SubCategory}
70+
* @return TypeSpec.Builder subCategoryTypeSpecBuilder
71+
*/
72+
public static TypeSpec.Builder createSubCategoryTypeSpecBuilder(Element pluginElement, Element categoryElement, Category category, Category.SubCategory subCategory) {
73+
TypeSpec.Builder subCategoryTypeSpecBuilder = TypeSpec.classBuilder(SpecUtils.capitalize(subCategory.id())).addModifiers(Modifier.PUBLIC, Modifier.STATIC);
74+
75+
subCategoryTypeSpecBuilder.addField(SpecUtils.getStaticFinalStringFieldSpec("id", SubCategoryHelper.getSubCategoryId(pluginElement, categoryElement, category, subCategory)));
76+
subCategoryTypeSpecBuilder.addField(SpecUtils.getStaticFinalStringFieldSpec("name", subCategory.name()));
77+
subCategoryTypeSpecBuilder.addField(SpecUtils.getStaticFinalStringFieldSpec("imagepath", subCategory.imagePath()));
78+
79+
return subCategoryTypeSpecBuilder;
80+
}
81+
6282
/**
6383
* Generates a TypeSpec.Builder with Constants for the {@link Action}
6484
*
@@ -75,7 +95,12 @@ public static TypeSpec.Builder createActionTypeSpecBuilder(Element pluginElement
7595
TypeSpec.Builder actionTypeSpecBuilder = TypeSpec.classBuilder(SpecUtils.capitalize(simpleClassName)).addModifiers(Modifier.PUBLIC, Modifier.STATIC);
7696
actionTypeSpecBuilder.addModifiers(Modifier.PUBLIC);
7797

78-
actionTypeSpecBuilder.addField(SpecUtils.getStaticFinalStringFieldSpec("id", ActionHelper.getActionId(pluginElement, categoryElement, category, actionElement, action)));
98+
if (!action.subCategoryId().isEmpty()) {
99+
actionTypeSpecBuilder.addField(SpecUtils.getStaticFinalStringFieldSpec("id", ActionHelper.getActionId(pluginElement, categoryElement, category, action.subCategoryId(), actionElement, action)));
100+
actionTypeSpecBuilder.addField(SpecUtils.getStaticFinalStringFieldSpec("sub_category_id", SubCategoryHelper.getSubCategoryId(pluginElement, categoryElement, category, action.subCategoryId())));
101+
} else {
102+
actionTypeSpecBuilder.addField(SpecUtils.getStaticFinalStringFieldSpec("id", ActionHelper.getActionId(pluginElement, categoryElement, category, actionElement, action)));
103+
}
79104
actionTypeSpecBuilder.addField(SpecUtils.getStaticFinalStringFieldSpec("name", ActionHelper.getActionName(actionElement, action)));
80105
actionTypeSpecBuilder.addField(SpecUtils.getStaticFinalStringFieldSpec("prefix", action.prefix()));
81106
actionTypeSpecBuilder.addField(SpecUtils.getStaticFinalStringFieldSpec("description", action.description()));
@@ -102,7 +127,12 @@ public static TypeSpec.Builder createConnectorTypeSpecBuilder(Element pluginElem
102127
TypeSpec.Builder actionTypeSpecBuilder = TypeSpec.classBuilder(SpecUtils.capitalize(simpleClassName)).addModifiers(Modifier.PUBLIC, Modifier.STATIC);
103128
actionTypeSpecBuilder.addModifiers(Modifier.PUBLIC);
104129

105-
actionTypeSpecBuilder.addField(SpecUtils.getStaticFinalStringFieldSpec("id", ConnectorHelper.getConnectorId(pluginElement, categoryElement, category, connectorElement, connector)));
130+
if (!connector.subCategoryId().isEmpty()) {
131+
actionTypeSpecBuilder.addField(SpecUtils.getStaticFinalStringFieldSpec("id", ConnectorHelper.getConnectorId(pluginElement, categoryElement, category, connector.subCategoryId(), connectorElement, connector)));
132+
actionTypeSpecBuilder.addField(SpecUtils.getStaticFinalStringFieldSpec("sub_category_id", SubCategoryHelper.getSubCategoryId(pluginElement, categoryElement, category, connector.subCategoryId())));
133+
} else {
134+
actionTypeSpecBuilder.addField(SpecUtils.getStaticFinalStringFieldSpec("id", ConnectorHelper.getConnectorId(pluginElement, categoryElement, category, connectorElement, connector)));
135+
}
106136
actionTypeSpecBuilder.addField(SpecUtils.getStaticFinalStringFieldSpec("name", ConnectorHelper.getConnectorName(connectorElement, connector)));
107137
actionTypeSpecBuilder.addField(SpecUtils.getStaticFinalStringFieldSpec("format", connector.format()));
108138

@@ -258,7 +288,12 @@ public static TypeSpec.Builder createEventTypeSpecBuilder(Element pluginElement,
258288
String simpleClassName = event.id().isEmpty() ? eventElement.getSimpleName().toString() : event.id();
259289

260290
TypeSpec.Builder eventTypeSpecBuilder = TypeSpec.classBuilder(SpecUtils.capitalize(simpleClassName)).addModifiers(Modifier.PUBLIC, Modifier.STATIC);
261-
eventTypeSpecBuilder.addField(SpecUtils.getStaticFinalStringFieldSpec("id", EventHelper.getEventId(pluginElement, categoryElement, category, eventElement, event)));
291+
if (!event.subCategoryId().isEmpty()) {
292+
eventTypeSpecBuilder.addField(SpecUtils.getStaticFinalStringFieldSpec("id", EventHelper.getEventId(pluginElement, categoryElement, category, event.subCategoryId(), eventElement, event)));
293+
eventTypeSpecBuilder.addField(SpecUtils.getStaticFinalStringFieldSpec("sub_category_id", SubCategoryHelper.getSubCategoryId(pluginElement, categoryElement, category, event.subCategoryId())));
294+
} else {
295+
eventTypeSpecBuilder.addField(SpecUtils.getStaticFinalStringFieldSpec("id", EventHelper.getEventId(pluginElement, categoryElement, category, eventElement, event)));
296+
}
262297
eventTypeSpecBuilder.addField(SpecUtils.getStaticFinalStringFieldSpec("name", EventHelper.getEventName(eventElement, event)));
263298
eventTypeSpecBuilder.addField(SpecUtils.getStaticFinalStringFieldSpec("format", event.format()));
264299
eventTypeSpecBuilder.addField(SpecUtils.getStaticFinalStringArrayFieldSpec("value_choices", event.valueChoices()));

0 commit comments

Comments
 (0)