Fix for sonar issue: Methods should not have too many lines

Signed-off-by: Jonathan Philip Knoblauch <JonathanPhilip.Knoblauch@bosch-si.com>
This commit is contained in:
Jonathan Philip Knoblauch
2016-03-11 11:19:43 +01:00
parent 6ac4cac60f
commit 6cc64639bd
3 changed files with 208 additions and 167 deletions

View File

@@ -44,6 +44,17 @@ public class GenerateDialog extends Window {
private final FormLayout formLayout = new FormLayout(); private final FormLayout formLayout = new FormLayout();
private final TextField tf1;
private final TextField tf2;
private final TextField tf3;
private final TextField tf4;
private final TextField tf5;
private final TextField tf6;
private final OptionGroup protocolGroup;
private final Button buttonOk;
/** /**
* Creates a new pop window for setting the configuration of simulating * Creates a new pop window for setting the configuration of simulating
* devices. * devices.
@@ -57,28 +68,28 @@ public class GenerateDialog extends Window {
formLayout.setSpacing(true); formLayout.setSpacing(true);
formLayout.setMargin(true); formLayout.setMargin(true);
final TextField tf1 = new TextField("name prefix", "dmfSimulated"); tf1 = new TextField("name prefix", "dmfSimulated");
tf1.setIcon(FontAwesome.INFO); tf1.setIcon(FontAwesome.INFO);
tf1.setRequired(true); tf1.setRequired(true);
tf1.addValidator(new NullValidator("Must be given", false)); tf1.addValidator(new NullValidator("Must be given", false));
final TextField tf2 = new TextField("amount", new ObjectProperty<Integer>(10)); tf2 = new TextField("amount", new ObjectProperty<Integer>(10));
tf2.setIcon(FontAwesome.GEAR); tf2.setIcon(FontAwesome.GEAR);
tf2.setRequired(true); tf2.setRequired(true);
tf2.addValidator(new RangeValidator<Integer>("Must be between 1 and 30000", Integer.class, 1, 30000)); tf2.addValidator(new RangeValidator<Integer>("Must be between 1 and 30000", Integer.class, 1, 30000));
final TextField tf3 = new TextField("tenant", "default"); tf3 = new TextField("tenant", "default");
tf3.setIcon(FontAwesome.USER); tf3.setIcon(FontAwesome.USER);
tf3.setRequired(true); tf3.setRequired(true);
tf3.addValidator(new NullValidator("Must be given", false)); tf3.addValidator(new NullValidator("Must be given", false));
final TextField tf4 = new TextField("poll delay (sec)", new ObjectProperty<Integer>(10)); tf4 = new TextField("poll delay (sec)", new ObjectProperty<Integer>(10));
tf4.setIcon(FontAwesome.CLOCK_O); tf4.setIcon(FontAwesome.CLOCK_O);
tf4.setRequired(true); tf4.setRequired(true);
tf4.setVisible(false); tf4.setVisible(false);
tf4.addValidator(new RangeValidator<Integer>("Must be between 1 and 60", Integer.class, 1, 60)); tf4.addValidator(new RangeValidator<Integer>("Must be between 1 and 60", Integer.class, 1, 60));
final TextField tf5 = new TextField("base poll URL endpoint", "http://localhost:8080"); tf5 = new TextField("base poll URL endpoint", "http://localhost:8080");
tf5.setColumns(50); tf5.setColumns(50);
tf5.setIcon(FontAwesome.FLAG_O); tf5.setIcon(FontAwesome.FLAG_O);
tf5.setRequired(true); tf5.setRequired(true);
@@ -86,57 +97,14 @@ public class GenerateDialog extends Window {
tf5.addValidator(new RegexpValidator("^(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]", tf5.addValidator(new RegexpValidator("^(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]",
"is not an URL")); "is not an URL"));
final TextField tf6 = new TextField("gateway token", ""); tf6 = new TextField("gateway token", "");
tf6.setColumns(50); tf6.setColumns(50);
tf6.setIcon(FontAwesome.FLAG_O); tf6.setIcon(FontAwesome.FLAG_O);
tf6.setRequired(true); tf6.setRequired(true);
tf6.setVisible(false); tf6.setVisible(false);
final OptionGroup protocolGroup = new OptionGroup("Simulated Device Protocol"); protocolGroup = createProtocolGroup();
protocolGroup.addItem(Protocol.DMF_AMQP); buttonOk = createOkButton(callback);
protocolGroup.addItem(Protocol.DDI_HTTP);
protocolGroup.setItemCaption(Protocol.DMF_AMQP, "Device Management Federation API (AMQP push)");
protocolGroup.setItemCaption(Protocol.DDI_HTTP, "Direct Device Interface (HTTP poll)");
protocolGroup.setNullSelectionAllowed(false);
protocolGroup.select(Protocol.DMF_AMQP);
protocolGroup.addValueChangeListener(new ValueChangeListener() {
private static final long serialVersionUID = 1L;
@Override
public void valueChange(final ValueChangeEvent event) {
if (event.getProperty().getValue().equals(Protocol.DDI_HTTP)) {
tf4.setVisible(true);
tf5.setVisible(true);
tf6.setVisible(true);
} else {
tf4.setVisible(false);
tf5.setVisible(false);
tf6.setVisible(false);
}
}
});
final Button buttonOk = new Button("generate");
buttonOk.setImmediate(true);
buttonOk.setIcon(FontAwesome.GEARS);
buttonOk.addClickListener(new ClickListener() {
private static final long serialVersionUID = 1L;
@Override
public void buttonClick(final ClickEvent event) {
try {
callback.okButton(tf1.getValue(), tf3.getValue(),
Integer.valueOf(tf2.getValue().replace(".", "").replace(",", "")),
Integer.valueOf(tf4.getValue().replace(".", "")), new URL(tf5.getValue()), tf6.getValue(),
(Protocol) protocolGroup.getValue());
} catch (final NumberFormatException e) {
LOGGER.info(e.getMessage(), e);
} catch (final MalformedURLException e) {
LOGGER.info(e.getMessage(), e);
}
GenerateDialog.this.close();
}
});
tf1.addValueChangeListener(event -> checkValid(tf1, tf2, tf3, tf4, buttonOk)); tf1.addValueChangeListener(event -> checkValid(tf1, tf2, tf3, tf4, buttonOk));
tf2.addValueChangeListener(event -> checkValid(tf1, tf2, tf3, tf4, buttonOk)); tf2.addValueChangeListener(event -> checkValid(tf1, tf2, tf3, tf4, buttonOk));
@@ -231,4 +199,59 @@ public class GenerateDialog extends Window {
void okButton(final String namePrefix, final String tenant, final int amount, final int pollDelay, void okButton(final String namePrefix, final String tenant, final int amount, final int pollDelay,
final URL basePollURL, final String gatewayToken, final Protocol protocol); final URL basePollURL, final String gatewayToken, final Protocol protocol);
} }
private OptionGroup createProtocolGroup() {
final OptionGroup protocolGroup = new OptionGroup("Simulated Device Protocol");
protocolGroup.addItem(Protocol.DMF_AMQP);
protocolGroup.addItem(Protocol.DDI_HTTP);
protocolGroup.setItemCaption(Protocol.DMF_AMQP, "Device Management Federation API (AMQP push)");
protocolGroup.setItemCaption(Protocol.DDI_HTTP, "Direct Device Interface (HTTP poll)");
protocolGroup.setNullSelectionAllowed(false);
protocolGroup.select(Protocol.DMF_AMQP);
protocolGroup.addValueChangeListener(new ValueChangeListener() {
private static final long serialVersionUID = 1L;
@Override
public void valueChange(final ValueChangeEvent event) {
if (event.getProperty().getValue().equals(Protocol.DDI_HTTP)) {
tf4.setVisible(true);
tf5.setVisible(true);
tf6.setVisible(true);
} else {
tf4.setVisible(false);
tf5.setVisible(false);
tf6.setVisible(false);
}
}
});
return protocolGroup;
}
private Button createOkButton(final GenerateDialogCallback callback) {
final Button buttonOk = new Button("generate");
buttonOk.setImmediate(true);
buttonOk.setIcon(FontAwesome.GEARS);
buttonOk.addClickListener(new ClickListener() {
private static final long serialVersionUID = 1L;
@Override
public void buttonClick(final ClickEvent event) {
try {
callback.okButton(tf1.getValue(), tf3.getValue(),
Integer.valueOf(tf2.getValue().replace(".", "").replace(",", "")),
Integer.valueOf(tf4.getValue().replace(".", "")), new URL(tf5.getValue()), tf6.getValue(),
(Protocol) protocolGroup.getValue());
} catch (final NumberFormatException e) {
LOGGER.info(e.getMessage(), e);
} catch (final MalformedURLException e) {
LOGGER.info(e.getMessage(), e);
}
GenerateDialog.this.close();
}
});
return buttonOk;
}
} }

View File

@@ -76,8 +76,8 @@ public class SimulatorView extends VerticalLayout implements View {
private final Label caption = new Label("DMF/DDI Simulated Devices"); private final Label caption = new Label("DMF/DDI Simulated Devices");
private final HorizontalLayout toolbar = new HorizontalLayout(); private final HorizontalLayout toolbar = new HorizontalLayout();
private final Grid grid = new Grid(); private final Grid grid = new Grid();
private final ComboBox responseComboBox = new ComboBox("", Lists.newArrayList(ResponseStatus.SUCCESSFUL, private final ComboBox responseComboBox = new ComboBox("",
ResponseStatus.ERROR)); Lists.newArrayList(ResponseStatus.SUCCESSFUL, ResponseStatus.ERROR));
private BeanContainer<String, AbstractSimulatedDevice> beanContainer; private BeanContainer<String, AbstractSimulatedDevice> beanContainer;
@@ -97,6 +97,9 @@ public class SimulatorView extends VerticalLayout implements View {
grid.setSizeFull(); grid.setSizeFull();
grid.setCellStyleGenerator(new CellStyleGenerator() { grid.setCellStyleGenerator(new CellStyleGenerator() {
private static final long serialVersionUID = 1L;
@Override @Override
public String getStyle(final CellReference cellReference) { public String getStyle(final CellReference cellReference) {
return cellReference.getPropertyId().equals("status") ? "centeralign" : null; return cellReference.getPropertyId().equals("status") ? "centeralign" : null;
@@ -118,86 +121,8 @@ public class SimulatorView extends VerticalLayout implements View {
grid.getColumn("swversion").setHeaderCaption("SW Version"); grid.getColumn("swversion").setHeaderCaption("SW Version");
grid.getColumn("responseStatus").setHeaderCaption("Response Update Status"); grid.getColumn("responseStatus").setHeaderCaption("Response Update Status");
grid.getColumn("progress").setRenderer(new ProgressBarRenderer()); grid.getColumn("progress").setRenderer(new ProgressBarRenderer());
grid.getColumn("protocol").setConverter(new Converter<String, Protocol>() { grid.getColumn("protocol").setConverter(getProtocolConverter());
@Override grid.getColumn("status").setRenderer(new HtmlRenderer(), getStatusConverter());
public Protocol convertToModel(final String value, final Class<? extends Protocol> targetType,
final Locale locale) {
return null;
}
@Override
public String convertToPresentation(final Protocol value, final Class<? extends String> targetType,
final Locale locale) {
switch (value) {
case DDI_HTTP:
return "DDI API (http)";
case DMF_AMQP:
return "DMF API (amqp)";
default:
return "unknown";
}
}
@Override
public Class<Protocol> getModelType() {
return Protocol.class;
}
@Override
public Class<String> getPresentationType() {
return String.class;
}
});
grid.getColumn("status").setRenderer(new HtmlRenderer(), new Converter<String, Status>() {
private static final long serialVersionUID = 1L;
@Override
public Status convertToModel(final String value, final Class<? extends Status> targetType,
final Locale locale) {
return null;
}
@Override
public String convertToPresentation(final Status value, final Class<? extends String> targetType,
final Locale locale) {
String style = null;
switch (value) {
case UNKNWON:
style = "<span class=\"v-icon grayicon\" style=\"font-family: " + FontAwesome.FONT_FAMILY
+ ";\"color\":\"gray\";\">&#x"
+ Integer.toHexString(FontAwesome.QUESTION_CIRCLE.getCodepoint()) + ";</span>";
break;
case PEDNING:
style = "<span class=\"v-icon yellowicon\" style=\"font-family: " + FontAwesome.FONT_FAMILY
+ ";\"color\":\"yellow\";\">&#x" + Integer.toHexString(FontAwesome.REFRESH.getCodepoint())
+ ";</span>";
break;
case FINISH:
style = "<span class=\"v-icon greenicon\" style=\"font-family: " + FontAwesome.FONT_FAMILY
+ ";\"color\":\"green\";\">&#x"
+ Integer.toHexString(FontAwesome.CHECK_CIRCLE.getCodepoint()) + ";</span>";
break;
case ERROR:
style = "<span class=\"v-icon redicon\" style=\"font-family: " + FontAwesome.FONT_FAMILY
+ ";\"color\":\"red\";\">&#x"
+ Integer.toHexString(FontAwesome.EXCLAMATION_CIRCLE.getCodepoint()) + ";</span>";
break;
default:
throw new IllegalStateException("unknown value");
}
return style;
}
@Override
public Class<Status> getModelType() {
return Status.class;
}
@Override
public Class<String> getPresentationType() {
return String.class;
}
});
grid.removeColumn("tenant"); grid.removeColumn("tenant");
// grid combobox // grid combobox
@@ -206,11 +131,13 @@ public class SimulatorView extends VerticalLayout implements View {
responseComboBox.setNullSelectionAllowed(false); responseComboBox.setNullSelectionAllowed(false);
responseComboBox.setValue(ResponseStatus.SUCCESSFUL); responseComboBox.setValue(ResponseStatus.SUCCESSFUL);
responseComboBox.addValueChangeListener(new ValueChangeListener() { responseComboBox.addValueChangeListener(new ValueChangeListener() {
private static final long serialVersionUID = 1L;
@Override @Override
public void valueChange(final ValueChangeEvent event) { public void valueChange(final ValueChangeEvent event) {
beanContainer.getItemIds().forEach( beanContainer.getItemIds().forEach(itemId -> beanContainer.getItem(itemId)
itemId -> beanContainer.getItem(itemId).getItemProperty("responseStatus") .getItemProperty("responseStatus").setValue(event.getProperty().getValue()));
.setValue(event.getProperty().getValue()));
} }
}); });
@@ -338,4 +265,96 @@ public class SimulatorView extends VerticalLayout implements View {
} }
})); }));
} }
private Converter<String, Protocol> getProtocolConverter() {
return new Converter<String, Protocol>() {
private static final long serialVersionUID = 1L;
@Override
public Protocol convertToModel(final String value, final Class<? extends Protocol> targetType,
final Locale locale) {
return null;
}
@Override
public String convertToPresentation(final Protocol value, final Class<? extends String> targetType,
final Locale locale) {
switch (value) {
case DDI_HTTP:
return "DDI API (http)";
case DMF_AMQP:
return "DMF API (amqp)";
default:
return "unknown";
}
}
@Override
public Class<Protocol> getModelType() {
return Protocol.class;
}
@Override
public Class<String> getPresentationType() {
return String.class;
}
};
}
private Converter<String, Status> getStatusConverter() {
return new Converter<String, Status>() {
private static final long serialVersionUID = 1L;
@Override
public Status convertToModel(final String value, final Class<? extends Status> targetType,
final Locale locale) {
return null;
}
@Override
public String convertToPresentation(final Status value, final Class<? extends String> targetType,
final Locale locale) {
String style = null;
switch (value) {
case UNKNWON:
style = "<span class=\"v-icon grayicon\" style=\"font-family: " + FontAwesome.FONT_FAMILY
+ ";\"color\":\"gray\";\">&#x"
+ Integer.toHexString(FontAwesome.QUESTION_CIRCLE.getCodepoint()) + ";</span>";
break;
case PEDNING:
style = "<span class=\"v-icon yellowicon\" style=\"font-family: " + FontAwesome.FONT_FAMILY
+ ";\"color\":\"yellow\";\">&#x" + Integer.toHexString(FontAwesome.REFRESH.getCodepoint())
+ ";</span>";
break;
case FINISH:
style = "<span class=\"v-icon greenicon\" style=\"font-family: " + FontAwesome.FONT_FAMILY
+ ";\"color\":\"green\";\">&#x"
+ Integer.toHexString(FontAwesome.CHECK_CIRCLE.getCodepoint()) + ";</span>";
break;
case ERROR:
style = "<span class=\"v-icon redicon\" style=\"font-family: " + FontAwesome.FONT_FAMILY
+ ";\"color\":\"red\";\">&#x"
+ Integer.toHexString(FontAwesome.EXCLAMATION_CIRCLE.getCodepoint()) + ";</span>";
break;
default:
throw new IllegalStateException("unknown value");
}
return style;
}
@Override
public Class<Status> getModelType() {
return Status.class;
}
@Override
public Class<String> getPresentationType() {
return String.class;
}
};
}
} }

View File

@@ -302,13 +302,10 @@ public class DeploymentManagement {
.collect(Collectors.toMap(TargetWithActionType::getTargetId, Function.identity())); .collect(Collectors.toMap(TargetWithActionType::getTargetId, Function.identity()));
// split tIDs length into max entries in-statement because many database // split tIDs length into max entries in-statement because many database
// have constraint of // have constraint of max entries in in-statements e.g. Oracle with
// max entries in in-statements e.g. Oracle with maximum 1000 elements, // maximum 1000 elements, so we need to split the entries here and
// so we need to split // execute multiple statements we take the target only into account if
// the entries here and execute multiple statements // the requested operation is no duplicate of a previous one
// we take the target only into account if the requested operation is no
// duplicate of a
// previous one
final List<Target> targets = Lists.partition(controllerIDs, Constants.MAX_ENTRIES_IN_STATEMENT).stream() final List<Target> targets = Lists.partition(controllerIDs, Constants.MAX_ENTRIES_IN_STATEMENT).stream()
.map(ids -> targetRepository .map(ids -> targetRepository
.findAll(TargetSpecifications.hasControllerIdAndAssignedDistributionSetIdNot(ids, set.getId()))) .findAll(TargetSpecifications.hasControllerIdAndAssignedDistributionSetIdNot(ids, set.getId())))
@@ -326,10 +323,9 @@ public class DeploymentManagement {
targets.stream().map(Target::getId).collect(Collectors.toList()), Constants.MAX_ENTRIES_IN_STATEMENT); targets.stream().map(Target::getId).collect(Collectors.toList()), Constants.MAX_ENTRIES_IN_STATEMENT);
// override all active actions and set them into canceling state, we // override all active actions and set them into canceling state, we
// need to remember which // need to remember which one we have been switched to canceling state
// one we have been switched to canceling state because for targets // because for targets which we have changed to canceling we don't want
// which we have changed to // to publish the new action update event.
// canceling we don't want to publish the new action update event.
final Set<Long> targetIdsCancellList = new HashSet<>(); final Set<Long> targetIdsCancellList = new HashSet<>();
targetIds.forEach(ids -> targetIdsCancellList.addAll(overrideObsoleteUpdateActions(ids))); targetIds.forEach(ids -> targetIdsCancellList.addAll(overrideObsoleteUpdateActions(ids)));
@@ -349,27 +345,15 @@ public class DeploymentManagement {
targetIds.forEach(tIds -> targetRepository.setAssignedDistributionSet(set, System.currentTimeMillis(), targetIds.forEach(tIds -> targetRepository.setAssignedDistributionSet(set, System.currentTimeMillis(),
currentUser, tIds)); currentUser, tIds));
targetIds.forEach(tIds -> targetInfoRepository.setTargetUpdateStatus(TargetUpdateStatus.PENDING, tIds)); targetIds.forEach(tIds -> targetInfoRepository.setTargetUpdateStatus(TargetUpdateStatus.PENDING, tIds));
final Map<String, Action> targetIdsToActions = actionRepository
.save(targets.stream().map(t -> createTargetAction(targetsWithActionMap, t, set, rollout, rolloutGroup))
.collect(Collectors.toList()))
.stream().collect(Collectors.toMap(a -> a.getTarget().getControllerId(), Function.identity()));
final Map<String, Action> targetIdsToActions = actionRepository.save(targets.stream().map(t -> { // create initial action status when action is created so we remember
final Action tAction = new Action(); // the initial running status because we will change the status
final TargetWithActionType targetWithActionType = targetsWithActionMap.get(t.getControllerId()); // of the action itself and with this action status we have a nicer
tAction.setActionType(targetWithActionType.getActionType()); // action history.
tAction.setForcedTime(targetWithActionType.getForceTime());
tAction.setActive(true);
tAction.setStatus(Status.RUNNING);
tAction.setTarget(t);
tAction.setDistributionSet(set);
tAction.setRollout(rollout);
tAction.setRolloutGroup(rolloutGroup);
return tAction;
}).collect(Collectors.toList())).stream()
.collect(Collectors.toMap(a -> a.getTarget().getControllerId(), Function.identity()));
// create initial action status when action is created so we
// remember the initial
// running status because we will change the status of the action itself
// and with this action
// status we have a nicer action history.
targetIdsToActions.values().forEach(action -> { targetIdsToActions.values().forEach(action -> {
final ActionStatus actionStatus = new ActionStatus(); final ActionStatus actionStatus = new ActionStatus();
actionStatus.setAction(action); actionStatus.setAction(action);
@@ -405,6 +389,21 @@ public class DeploymentManagement {
softwareModules)); softwareModules));
} }
private Action createTargetAction(final Map<String, TargetWithActionType> targetsWithActionMap, final Target t,
final DistributionSet set, final Rollout rollout, final RolloutGroup rolloutGroup) {
final Action tAction = new Action();
final TargetWithActionType targetWithActionType = targetsWithActionMap.get(t.getControllerId());
tAction.setActionType(targetWithActionType.getActionType());
tAction.setForcedTime(targetWithActionType.getForceTime());
tAction.setActive(true);
tAction.setStatus(Status.RUNNING);
tAction.setTarget(t);
tAction.setDistributionSet(set);
tAction.setRollout(rollout);
tAction.setRolloutGroup(rolloutGroup);
return tAction;
}
/** /**
* Sends the {@link TargetAssignDistributionSetEvent} for a specific target * Sends the {@link TargetAssignDistributionSetEvent} for a specific target
* to the {@link EventBus}. * to the {@link EventBus}.