Skip to content

Commit

Permalink
Refactor text component builders, add TextAreaComponentBuilder
Browse files Browse the repository at this point in the history
  • Loading branch information
adam-wyluda committed Jun 19, 2014
1 parent c2f14c0 commit f8d46d2
Show file tree
Hide file tree
Showing 7 changed files with 237 additions and 163 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/*
* Copyright 2014 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Eclipse Public License version 1.0, available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.jboss.forge.plugin.idea.ui.component;

import org.jboss.forge.addon.ui.input.InputComponent;
import org.jboss.forge.addon.ui.input.UIInput;

import javax.swing.text.JTextComponent;

/**
* @author Adam Wyłuda
*/
public abstract class AbstractTextComponentBuilder extends ComponentBuilder
{
@Override
public ForgeComponent build(InputComponent<?, Object> input)
{
return new LabeledComponent(input, new TextComponent(input, createTextComponent()));
}

@Override
protected Class<String> getProducedType()
{
return String.class;
}

@Override
protected Class<?>[] getSupportedInputComponentTypes()
{
return new Class<?>[]{UIInput.class};
}

protected abstract JTextComponent createTextComponent();
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ public enum ComponentBuilderRegistry
new FileChooserComponentBuilder(),
new TextBoxComponentBuilder(),
new PasswordComponentBuilder(),
new TextAreaComponentBuilder(),
new FallbackTextBoxComponentBuilder()};

public ComponentBuilder getBuilderFor(InputComponent<?, ?> input)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
/*
* Copyright 2014 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Eclipse Public License version 1.0, available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.jboss.forge.plugin.idea.ui.component;

import com.intellij.ui.components.JBLabel;
import org.jboss.forge.addon.ui.input.InputComponent;
import org.jboss.forge.addon.ui.output.UIMessage;

import java.awt.*;
import java.util.List;

/**
* Component with label.
*
* @author Adam Wyłuda
*/
public class LabeledComponent extends ForgeComponent
{
private final JBLabel label;
private final ForgeComponent component;

public LabeledComponent(InputComponent<?, Object> input, ForgeComponent component)
{
this.label = new JBLabel(getLabelValue(input));
this.component = component;
}

@Override
public void buildUI(Container container)
{
container.add(label);
component.buildUI(container);
}

private String getLabelValue(InputComponent<?, Object> input)
{
String labelValue = input.getLabel() == null ? input.getName() : input.getLabel();
return labelValue + ":";
}

@Override
public void displayMessages(List<UIMessage> messages)
{
component.displayMessages(messages);
}

@Override
public void setErrorMessage(UIMessage message)
{
component.setErrorMessage(message);
}

@Override
public void clearErrorMessage()
{
component.clearErrorMessage();
}

@Override
public void setValueChangeListener(Runnable valueChangeListener)
{
component.setValueChangeListener(valueChangeListener);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,91 +6,22 @@
*/
package org.jboss.forge.plugin.idea.ui.component;

import com.intellij.ui.components.JBLabel;
import org.jboss.forge.addon.convert.Converter;
import org.jboss.forge.addon.convert.ConverterFactory;
import org.jboss.forge.addon.ui.hints.InputType;
import org.jboss.forge.addon.ui.input.InputComponent;
import org.jboss.forge.addon.ui.input.UIInput;
import org.jboss.forge.addon.ui.util.InputComponents;
import org.jboss.forge.plugin.idea.service.ServiceHelper;

import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import java.awt.*;
import javax.swing.text.JTextComponent;

public class PasswordComponentBuilder extends ComponentBuilder
public class PasswordComponentBuilder extends AbstractTextComponentBuilder
{

@Override
public ForgeComponent build(final InputComponent<?, Object> input)
{
return new ForgeComponent()
{
@Override
public void buildUI(Container container)
{
final JTextField textField = new JPasswordField();
// Set Default Value
final ConverterFactory converterFactory = ServiceHelper.getForgeService()
.lookup(ConverterFactory.class);
Converter<Object, String> converter = converterFactory.getConverter(
input.getValueType(), String.class);
String value = converter.convert(InputComponents.getValueFor(input));
textField.setText(value == null ? "" : value);

textField.getDocument().addDocumentListener(new DocumentListener()
{
@Override
public void removeUpdate(DocumentEvent e)
{
InputComponents.setValueFor(converterFactory, input,
textField.getText());
valueChangeListener.run();
}

@Override
public void insertUpdate(DocumentEvent e)
{
InputComponents.setValueFor(converterFactory, input,
textField.getText());
valueChangeListener.run();
}

@Override
public void changedUpdate(DocumentEvent e)
{
InputComponents.setValueFor(converterFactory, input,
textField.getText());
valueChangeListener.run();
}
});
String labelValue = input.getLabel() == null ? input.getName() : input
.getLabel();
JBLabel label = new JBLabel(labelValue);
container.add(label);
container.add(textField);
}
};
}

@Override
protected Class<String> getProducedType()
{
return String.class;
}

@Override
protected String getSupportedInputType()
{
return InputType.SECRET;
}

@Override
protected Class<?>[] getSupportedInputComponentTypes()
protected JTextComponent createTextComponent()
{
return new Class<?>[]{UIInput.class};
return new JPasswordField();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/*
* Copyright 2014 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Eclipse Public License version 1.0, available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.jboss.forge.plugin.idea.ui.component;

import org.jboss.forge.addon.ui.hints.InputType;

import javax.swing.*;
import javax.swing.text.JTextComponent;

/**
* @author Adam Wyłuda
*/
public class TextAreaComponentBuilder extends AbstractTextComponentBuilder
{
@Override
protected JTextComponent createTextComponent()
{
return new JTextArea();
}

@Override
protected String getSupportedInputType()
{
return InputType.TEXTAREA;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,107 +6,22 @@
*/
package org.jboss.forge.plugin.idea.ui.component;

import com.intellij.ui.JBColor;
import com.intellij.ui.components.JBLabel;
import org.jboss.forge.addon.convert.Converter;
import org.jboss.forge.addon.convert.ConverterFactory;
import com.intellij.ui.components.JBTextField;
import org.jboss.forge.addon.ui.hints.InputType;
import org.jboss.forge.addon.ui.input.InputComponent;
import org.jboss.forge.addon.ui.input.UIInput;
import org.jboss.forge.addon.ui.output.UIMessage;
import org.jboss.forge.addon.ui.util.InputComponents;
import org.jboss.forge.plugin.idea.service.ServiceHelper;

import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import java.awt.*;
import javax.swing.text.JTextComponent;

public class TextBoxComponentBuilder extends ComponentBuilder
public class TextBoxComponentBuilder extends AbstractTextComponentBuilder
{

@Override
public ForgeComponent build(final InputComponent<?, Object> input)
{
return new ForgeComponent()
{
private JTextField textField;

@Override
public void buildUI(Container container)
{
textField = new JTextField();
// Set Default Value
final ConverterFactory converterFactory = ServiceHelper.getForgeService().getConverterFactory();
Converter<Object, String> converter = converterFactory.getConverter(
input.getValueType(), String.class);
String value = converter.convert(InputComponents.getValueFor(input));
textField.setText(value == null ? "" : value);

textField.getDocument().addDocumentListener(new DocumentListener()
{
@Override
public void removeUpdate(DocumentEvent e)
{
InputComponents.setValueFor(converterFactory, input,
textField.getText());
valueChangeListener.run();
}

@Override
public void insertUpdate(DocumentEvent e)
{
InputComponents.setValueFor(converterFactory, input,
textField.getText());
valueChangeListener.run();
}

@Override
public void changedUpdate(DocumentEvent e)
{
InputComponents.setValueFor(converterFactory, input,
textField.getText());
valueChangeListener.run();
}
});
String labelValue = input.getLabel() == null ? input.getName() : input
.getLabel();
JBLabel label = new JBLabel(labelValue);
container.add(label);
container.add(textField);
}

@Override
public void setErrorMessage(UIMessage message)
{
textField.setForeground(JBColor.RED);
textField.setToolTipText(message.getDescription());
}

@Override
public void clearErrorMessage()
{
textField.setForeground(null);
textField.setToolTipText("");
}
};
}

@Override
protected Class<String> getProducedType()
{
return String.class;
}

@Override
protected String getSupportedInputType()
{
return InputType.TEXTBOX;
}

@Override
protected Class<?>[] getSupportedInputComponentTypes()
protected JTextComponent createTextComponent()
{
return new Class<?>[]{UIInput.class};
return new JBTextField();
}
}
Loading

0 comments on commit f8d46d2

Please sign in to comment.