@Override
	public void visit(final Entry target) {
		final String actionName = target.getName();
		if (!actionName.isEmpty() && new EntryAccessor().getAction(target) == null) {
			AFreeplaneAction action = freeplaneActions.getAction(actionName);
			if(action == null) {
				for (final Class<? extends AFreeplaneAction> actionClass : Arrays.asList(SetBooleanPropertyAction.class, SetBooleanMapPropertyAction.class, SetBooleanMapViewPropertyAction.class,
					SetStringPropertyAction.class)){
					final String actionPrefix = actionClass.getSimpleName() + ".";
					if (actionName.startsWith(actionPrefix)) {
						String propertyName = actionName.substring(actionPrefix.length());
						action = createAction(actionClass, propertyName);
						if(action !=  null) {
							freeplaneActions.addAction(action);
						}
						break;
					}
				}
			}
			
			new EntryAccessor().setAction(target, action);
		}
	}
@Test
	public void attachesSetBooleanPropertyAction() {
		FreeplaneActions freeplaneActions = mock(FreeplaneActions.class);
		final SetBooleanPropertyAction setBooleanPropertyAction = Mockito.mock(SetBooleanPropertyAction.class);
		Entry entry = new Entry();
		final String propertyActionName = "SetBooleanPropertyAction.property";
		entry.setName(propertyActionName);
		when(freeplaneActions.getAction(propertyActionName)).thenReturn(null);
		
		final ActionFinder actionFinder = new ActionFinder(freeplaneActions){
			@Override
			protected AFreeplaneAction createAction(Class<? extends AFreeplaneAction> actionClass,
					String propertyName) {
				return setBooleanPropertyAction;
			}
			
		};
		actionFinder.visit(entry);
		
		Mockito.verify(freeplaneActions).addAction(setBooleanPropertyAction);
		assertThat(new EntryAccessor().getAction(entry), CoreMatchers.<Object> equalTo(setBooleanPropertyAction));
	}