protected <D> D i18nize(D renderableDefinition) { return i18nizer.decorate(renderableDefinition); }
@Inject public AppInstanceControllerImpl(AppController appController, LocationController locationController, Shell shell, MessagesManager messagesManager, AppDescriptor appDescriptor, SystemMonitor systemMonitor, I18nizer i18nizer, SimpleTranslator i18n) { this.appController = appController; this.locationController = locationController; this.shell = shell; this.messagesManager = messagesManager; this.appDescriptor = i18nizer.decorate(appDescriptor); this.systemMonitor = systemMonitor; this.i18n = i18n; }
@Override public void evaluate() throws Exception { i18nizer.decorate(i18nized); } }, throwsAnException(strictlyInstanceOf(IllegalStateException.class).withMessage(endsWith(" has already been enhanced by " + i18nizer.getClass().getSimpleName()))));
@Override public void setLayout(AppLauncherLayoutDefinition layout) { this.layoutDefinitionReference.set(i18nizerProvider.get().decorate(layout)); log.debug("Sending AppLauncherLayoutChangedEvent on the system bus"); appPermissionsCache.invalidateAll(); systemEventBus.fireEvent(new AppLauncherLayoutChangedEvent()); }
private Optional<AppDescriptor> getAppDescriptor(String appName) { try { final DefinitionProvider<AppDescriptor> definitionProvider = appDescriptorRegistry.getProvider(appName); if (definitionProvider.isValid()) { AppDescriptor appDescriptor = i18nizerProvider.get().decorate(definitionProvider.get()); if (StringUtils.isBlank(appDescriptor.getLabel()) || StringUtils.isBlank(appDescriptor.getIcon())) { log.warn("Label and/or icon for app [{}] are blank. App won't be displayed in the app launcher. Please either define them in the configuration tree or in the app's i18n properties file.", appName); } else { return Optional.of(appDescriptor); } } } catch (Registry.NoSuchDefinitionException e) { log.warn("Definition not found: {}", e.getMessage()); } catch (IllegalStateException e) { log.warn("Encountered IllegalStateException while getting appDescriptor: ", e.getMessage(), e); } return Optional.empty(); }
@Test @Ignore("currently can't proxy enums because they're final. The use-case would be to provide 'typed' static messages; maybe we can have another api, e.g SimpleTranslator - see MAGNOLIA-5296") public void decorateEnum() throws Exception { System.out.println("TextEnum.class.getClass(): " + TextEnum.class.getClass()); System.out.println("TextEnum.class.isInterface(): " + TextEnum.class.isInterface()); System.out.println("TextEnum.class.isEnum(): " + TextEnum.class.isEnum()); final Class<TextEnum> enumD = i18nizer.decorate(TextEnum.class); final TextEnum barD = i18nizer.decorate(TextEnum.bar); }
@Test public void decorateWithNullObjectDoesNotThrowException() throws Exception { // WHEN Object obj = i18nizer.decorate(null); // THEN assertNull(obj); }
@Before public void setUp() throws Exception { MockContext context = new MockContext(); User user = mock(User.class); when(user.getName()).thenReturn("testuser"); context.setUser(user); this.task = new Task(); this.definitionRegistry = mock(TaskDefinitionRegistry.class); ConfiguredPulseListDefinition presenterDefinition = mock(ConfiguredPulseListDefinition.class); I18nizer i18nizer = mock(I18nizer.class); when(presenterDefinition.getBulkActions()).thenReturn(new ArrayList<ActionDefinition>()); when(i18nizer.decorate(presenterDefinition)).thenReturn(presenterDefinition); this.tasksManager = mock(TasksManager.class); this.componentProvider = mock(ComponentProvider.class); this.presenter = new TasksListPresenter(mock(TasksDataProvider.class), mock(TasksListView.class), tasksManager, definitionRegistry, componentProvider, context, mock(EventBus.class), presenterDefinition, mock(AvailabilityChecker.class), mock(PulseListActionExecutor.class), mock(PulseListFooterPresenter.class), i18nizer); task.setName("testTask"); }
@Before public void setUp() { ConfiguredTaskUiDefinition definition = new ConfiguredTaskUiDefinition(); definition.setTaskView("pages:publish"); definition.setTitle("Test title"); Task task = new Task(); task.setComment("test comment"); task.setContent(new HashMap<String, Object>() {{ put("property1", "value1"); put("property2", "value2"); }}); this.view = mock(PulseDetailView.class); this.registry = mock(ItemViewDefinitionRegistry.class); I18nizer i18n = mock(I18nizer.class); when(i18n.decorate(any(ItemViewDefinition.class))).thenAnswer(new Answer<ItemViewDefinition>() { @Override public ItemViewDefinition answer(InvocationOnMock invocation) throws Throwable { Object[] args = invocation.getArguments(); return (ItemViewDefinition) args[0]; } }); formbuilder = mock(FormBuilder.class); presenter = new DefaultTaskDetailPresenter<TaskUiDefinition, Task>(view, definition, task, null, mock(PulseDetailActionExecutor.class), registry, formbuilder, mock(ActionbarPresenter.class), i18n); }
return appDescriptor; }).when(i18nizer).decorate(any());
@Before public void setUp() throws Exception { view = mock(PulseListFooterView.class); pulseListFooterPresenter = new PulseListFooterPresenter(view); ComponentProvider componentProvider = new MockComponentProvider(); definition = new ConfiguredPulseListDefinition(); I18nizer i18nizer = mock(I18nizer.class); when(i18nizer.decorate(definition)).thenReturn(definition); AvailabilityChecker availabilityChecker = new AvailabilityCheckerImpl(componentProvider, mock(ContentConnector.class)); context = new MockContext(); MgnlContext.setInstance(context); User user = mock(User.class); when(user.getName()).thenReturn("username"); when(user.getAllRoles()).thenReturn(Arrays.asList("canexecute")); context.setUser(user); final Message message = new Message(); message.setId("item 1"); selectedItems = ImmutableSet.of(message); MessagesListView messageView = mock(MessagesListView.class); when(messageView.getSelectedItems()).thenReturn(selectedItems); messagesListPresenter = new MessagesListPresenter(mock(MessagesDataProvider.class), mock(EventBus.class), messageView, null, componentProvider, context, definition, availabilityChecker, new PulseListActionExecutor(componentProvider), pulseListFooterPresenter, i18nizer); }
@Test public void keysForDialogDescription() throws SecurityException, NoSuchMethodException { // GIVEN // generator DialogDefinitionKeyGenerator generator = new DialogDefinitionKeyGenerator(); // structure ConfiguredFormDialogDefinition dialog = new ConfiguredFormDialogDefinition(); dialog.setId("test-module:testFolder/testDialog"); dialog = i18nizer.decorate(dialog); // WHEN List<String> keys = new ArrayList<String>(4); generator.keysFor(keys, dialog, dialog.getClass().getMethod("getDescription")); // THEN assertThat(keys.toArray(new String[]{}), arrayContaining( "test-module.testFolder.testDialog.description", "dialogs.testFolder.testDialog.description" )); }
@Test public void keysForColumnLabelWithinSubapp() throws SecurityException, NoSuchMethodException { // GIVEN Method method = column.getClass().getMethod("getLabel"); // decorate I18nizer i18nizer = new ProxytoysI18nizer(mock(TranslationService.class), mock(LocaleProvider.class)); app = i18nizer.decorate(app); // WHEN String[] keys = generator.keysFor((String) null, ((TestSubAppDef) app.getSubApps().get("<subapp>")).getWorkbench().getContentViews().get(0).getColumns().get(0), method); // THEN assertThat(keys, arrayContaining( "<app>.<subapp>.views.<view-type>.<column-name>.label", "<app>.<subapp>.views.<view-type>.<column-name>", "<app>.<subapp>.views.<column-name>.label", "<app>.<subapp>.views.<column-name>", "<app>.views.<view-type>.<column-name>.label", "<app>.views.<view-type>.<column-name>", "<app>.views.<column-name>.label", "<app>.views.<column-name>", "views.<view-type>.<column-name>.label", "views.<view-type>.<column-name>", "views.<column-name>.label", "views.<column-name>" )); }
@Test @Ignore("Currently makes no sense - un-ignore the day we find a real use-case") public void i18nTextAnnotationOnNonStringType() throws Exception { //GIVEN final WithNonStringText obj = new WithNonStringText(DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.MEDIUM), 12.34f); //WHEN final WithNonStringText decorated = i18nizer.decorate(obj); //THEN assertEquals("I'm not sure what to expect here, actually", decorated.getDateFormat()); assertEquals(Float.valueOf(12.34f), decorated.getFloat()); }
@Test public void keysForDialogLabel() throws SecurityException, NoSuchMethodException { // GIVEN // generator DialogDefinitionKeyGenerator generator = new DialogDefinitionKeyGenerator(); // structure ConfiguredFormDialogDefinition dialog = new ConfiguredFormDialogDefinition(); dialog.setId("test-module:testFolder/testDialog"); dialog = i18nizer.decorate(dialog); // WHEN List<String> keys = new ArrayList<String>(4); generator.keysFor(keys, dialog, dialog.getClass().getMethod("getLabel")); // THEN assertThat(keys.toArray(new String[]{}), arrayContaining( "test-module.testFolder.testDialog.label", "test-module.testFolder.testDialog", "dialogs.testFolder.testDialog.label", "dialogs.testFolder.testDialog" )); }
@Test @Ignore("Not implemented yet - not sure we want this") public void canFormatMessagesForMethodsWithArguments() throws Exception { // GIVEN final WithMethodArgs obj = new WithMethodArgs(); // WHEN final WithMethodArgs decorated = i18nizer.decorate(obj); // THEN assertEquals("Translated with key [my.key] and args [abc, 13] and locale [de_CH]", decorated.getFoo("abc", 13)); }
@Test public void keysForColumnLabelWithoutSubapp() throws SecurityException, NoSuchMethodException { // GIVEN Method method = column.getClass().getMethod("getLabel"); DummyTypeWithNoSubapp appDescriptor = new DummyTypeWithNoSubapp(); appDescriptor.setWorkbench(wb); appDescriptor.setName("<app>"); // decorate I18nizer i18nizer = new ProxytoysI18nizer(mock(TranslationService.class), mock(LocaleProvider.class)); appDescriptor = i18nizer.decorate(appDescriptor); // WHEN String[] keys = generator.keysFor((String) null, appDescriptor.getWorkbench().getContentViews().get(0).getColumns().get(0), method); // THEN assertThat(keys, arrayContaining( "<app>.views.<view-type>.<column-name>.label", "<app>.views.<view-type>.<column-name>", "<app>.views.<column-name>.label", "<app>.views.<column-name>", "views.<view-type>.<column-name>.label", "views.<view-type>.<column-name>", "views.<column-name>.label", "views.<column-name>" )); }
@Test public void keysForFieldLabelInChooseDialog() throws Exception { // GIVEN // generator DialogDefinitionKeyGenerator generator = new DialogDefinitionKeyGenerator(); // structure TestContentAppDescriptor app = new TestContentAppDescriptor(); app.setName("test-app"); ConfiguredChooseDialogDefinition chooseDialog = new ConfiguredChooseDialogDefinition(); // hierarchy app.setChooseDialog(chooseDialog); app = i18nizer.decorate(app); // WHEN List<String> keys = new ArrayList<String>(2); generator.keysFor(keys, app.getChooseDialog(), chooseDialog.getClass().getMethod("getLabel")); // THEN assertThat(keys.toArray(new String[]{}), arrayContaining( "test-app.chooseDialog.label", "test-app.chooseDialog" )); }
@Test @Ignore("Not implemented yet") public void decoratedMapShouldAllowToPutNewObjectsAndDecorateThem() throws Exception { // GIVEN final SampleObj obj = new SampleObj(); obj.setName("sampleName"); final ChildObj child1 = new ChildObj(); final ChildObj child2 = new ChildObj(); obj.getMap().put("child1", child1); SampleObj decorated = i18nizer.decorate(obj); // WHEN decorated.getMap().put("child2", child2); // THEN assertEquals(2, decorated.getMap().size()); assertTrue(decorated.getMap().get("child2") instanceof I18nParentable); }
@Test public void testWithChildrenInMap() throws Exception { // GIVEN SampleObj obj = new SampleObj(); obj.setName("sampleName"); final HashMap<String, ChildObj> map = new HashMap<String, ChildObj>(); map.put("x1", new ChildObj("c1")); map.put("x2", new ChildObj("c2")); map.put("x3", new ChildObj("c3")); obj.setMap(map); // WHEN obj = i18nizer.decorate(obj); // THEN // basic sanity check of parent object assertEquals("translated with key [testKG.sampleName.label] and basename [null] and locale [de_CH]", obj.getLabel()); // yes, the below is a bit repetitive and looks like copy-paste, but it's less magic-numbers-ridden that a for loop assertEquals("translated with key [testKG.sampleName.c1.label] and basename [null] and locale [de_CH]", obj.getMap().get("x1").getLabel()); assertEquals("translated with key [testKG.sampleName.c2.label] and basename [null] and locale [de_CH]", obj.getMap().get("x2").getLabel()); assertEquals("translated with key [testKG.sampleName.c3.label] and basename [null] and locale [de_CH]", obj.getMap().get("x3").getLabel()); }