package org.wiztools.restclient.ui.reqgo;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Toolkit;
import java.awt.event.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.inject.Singleton;
import javax.swing.*;
import org.wiztools.commons.StringUtil;
import org.wiztools.restclient.ui.RESTUserInterface;
import org.wiztools.restclient.ui.RESTView;
import org.wiztools.restclient.ui.UIUtil;
/**
*
* @author subwiz
*/
@Singleton
public class ReqUrlGoPanelImpl extends JPanel implements ReqUrlGoPanel {
private static final Logger LOG = Logger.getLogger(ReqUrlGoPanelImpl.class.getName());
@Inject private RESTUserInterface rest_ui;
@Inject private UrlComboBox jcb_url;
private final ImageIcon icon_go = UIUtil.getIconFromClasspath("org/wiztools/restclient/go.png");
private final ImageIcon icon_stop = UIUtil.getIconFromClasspath("org/wiztools/restclient/stop.png");
private static final String TEXT_GO = "Go!";
private static final String TEXT_STOP = "Stop!";
private final JButton jb_request = new JButton(icon_go);
private final List<ActionListener> listeners = new ArrayList<>();
@PostConstruct
protected void init() {
{ // Keystroke for focusing on the address bar:
final KeyStroke ks = KeyStroke.getKeyStroke(KeyEvent.VK_L,
Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());
final String actionName = "org.wiztools.restclient:ADDRESS_FOCUS";
jcb_url.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
.put(ks, actionName);
jcb_url.getActionMap().put(actionName, new AbstractAction() {
@Override
public void actionPerformed(ActionEvent ae) {
jcb_url.requestFocus();
}
});
}
// Layout follows:
// West:
JLabel jl_url = new JLabel("URL: ");
jl_url.setLabelFor(jcb_url);
jl_url.setDisplayedMnemonic('u');
rest_ui.getFrame().getRootPane().setDefaultButton(jb_request);
setLayout(new BorderLayout(RESTView.BORDER_WIDTH, 0));
add(jl_url, BorderLayout.WEST);
// Center:
add(jcb_url, BorderLayout.CENTER);
// East:
jb_request.setToolTipText(TEXT_GO);
rest_ui.getFrame().getRootPane().setDefaultButton(jb_request);
jb_request.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
jb_requestActionPerformed();
}
});
add(jb_request, BorderLayout.EAST);
}
@Override
public void addActionListener(ActionListener listener) {
listeners.add(listener);
}
public ACTION_TYPE getActionType() {
if(jb_request.getIcon() == icon_go){
return ACTION_TYPE.GO;
}
else {
return ACTION_TYPE.CANCEL;
}
}
private void jb_requestActionPerformed() {
if(StringUtil.isNotEmpty((String)jcb_url.getSelectedItem())) {
jcb_url.push();
}
for(ActionListener listener: listeners) {
listener.actionPerformed(null);
}
}
@Override
public String getUrlString() {
return (String) jcb_url.getSelectedItem();
}
@Override
public void setUrlString(String url) {
jcb_url.setSelectedItem(url);
}
@Override
public boolean isSslUrl() {
try {
URL url = new URL((String) jcb_url.getSelectedItem());
if(url.getProtocol().equalsIgnoreCase("https")) {
return true;
}
}
catch(MalformedURLException ex) {
// return default value!
}
return false;
}
@Override
public void clearHistory() {
jcb_url.removeAllItems();
}
@Override
public void requestFocus() {
super.requestFocus();
jcb_url.requestFocus();
}
@Override
public void setAsRunning() {
jb_request.setIcon(icon_stop);
jb_request.setToolTipText(TEXT_STOP);
}
@Override
public void setAsIdle() {
jb_request.setIcon(icon_go);
jb_request.setToolTipText(TEXT_GO);
}
@Override
public boolean isIdle() {
return jb_request.getIcon() == icon_go;
}
@Override
public boolean isRunning() {
return jb_request.getIcon() == icon_stop;
}
@Override
public Component getComponent() {
return this;
}
@Override
public void clear() {
jcb_url.setSelectedItem(null);
}
}