From fc325a18ae812b45c412941fe74b825c29027c19 Mon Sep 17 00:00:00 2001 From: fhaag95 Date: Fri, 2 Aug 2024 15:04:22 +0200 Subject: [PATCH 1/5] Disable Bake button if auto bake is active --- src/main/java/de/usd/cstchef/view/RecipePanel.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/de/usd/cstchef/view/RecipePanel.java b/src/main/java/de/usd/cstchef/view/RecipePanel.java index efeb97e..c2bb2b2 100644 --- a/src/main/java/de/usd/cstchef/view/RecipePanel.java +++ b/src/main/java/de/usd/cstchef/view/RecipePanel.java @@ -180,6 +180,7 @@ public void actionPerformed(ActionEvent e) { }); JButton bakeButton = new JButton("Bake"); + bakeButton.setEnabled(!autoBake); activeOperationsPanel.addActionComponent(bakeButton); bakeButton.addActionListener(new ActionListener() { @Override @@ -232,6 +233,7 @@ public void actionPerformed(ActionEvent arg0) { @Override public void actionPerformed(ActionEvent ae) { autoBake = bakeCheckBox.isSelected(); + bakeButton.setEnabled(!autoBake); bake(false); } }); From 84cd021e6ceba30679d55c00dc08eff6d7c13db8 Mon Sep 17 00:00:00 2001 From: fhaag95 Date: Fri, 2 Aug 2024 15:39:04 +0200 Subject: [PATCH 2/5] Add Remove Whitespace and Strip String operations --- src/main/java/de/usd/cstchef/Utils.java | 4 +- .../operations/string/RemoveWhitespace.java | 57 +++++++++++++++++++ .../usd/cstchef/operations/string/Strip.java | 54 ++++++++++++++++++ 3 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 src/main/java/de/usd/cstchef/operations/string/RemoveWhitespace.java create mode 100644 src/main/java/de/usd/cstchef/operations/string/Strip.java diff --git a/src/main/java/de/usd/cstchef/Utils.java b/src/main/java/de/usd/cstchef/Utils.java index b6db945..0b77305 100644 --- a/src/main/java/de/usd/cstchef/Utils.java +++ b/src/main/java/de/usd/cstchef/Utils.java @@ -136,6 +136,8 @@ import de.usd.cstchef.operations.string.Reverse; import de.usd.cstchef.operations.string.SplitAndSelect; import de.usd.cstchef.operations.string.StaticString; +import de.usd.cstchef.operations.string.Strip; +import de.usd.cstchef.operations.string.RemoveWhitespace; import de.usd.cstchef.operations.string.Substring; import de.usd.cstchef.operations.string.Suffix; import de.usd.cstchef.operations.string.Uppercase; @@ -318,7 +320,7 @@ public static Class[] getOperationsDev() { SetIfEmpty.class, SHA1.class, SHA2.class, SHA3.class, Skein.class, SplitAndSelect.class, StaticString.class, StoreVariable.class, Sub.class, Substring.class, Uppercase.class, Lowercase.class, Subtraction.class, - Suffix.class, Sum.class, StringContains.class, StringMatch.class, Tiger.class, + Suffix.class, Sum.class, StringContains.class, StringMatch.class, Strip.class, RemoveWhitespace.class, Tiger.class, TimestampOffset.class, TimestampToDateTime.class, ToBase64.class, ToHex.class, UnixTimestamp.class, UrlDecode.class, UrlEncode.class, Whirlpool.class, WriteFile.class, XmlFullSignature.class, XmlMultiSignature.class, diff --git a/src/main/java/de/usd/cstchef/operations/string/RemoveWhitespace.java b/src/main/java/de/usd/cstchef/operations/string/RemoveWhitespace.java new file mode 100644 index 0000000..37fcbda --- /dev/null +++ b/src/main/java/de/usd/cstchef/operations/string/RemoveWhitespace.java @@ -0,0 +1,57 @@ +package de.usd.cstchef.operations.string; + +import javax.swing.JComboBox; + +import burp.BurpUtils; +import burp.api.montoya.core.ByteArray; +import de.usd.cstchef.Utils.MessageType; +import de.usd.cstchef.operations.Operation; +import de.usd.cstchef.operations.OperationCategory; +import de.usd.cstchef.operations.Operation.OperationInfos; + +@OperationInfos(name = "Remove Whitespace", category = OperationCategory.STRING, description = "Removes Spaces, Tabs or Newlines from input") +public class RemoveWhitespace extends Operation { + + JComboBox whitespaceSelection; + + @Override + protected ByteArray perform(ByteArray input, MessageType messageType) throws Exception { + try { + if(input != null) { + String inputStr = input.toString(); + String selection = (String)this.whitespaceSelection.getSelectedItem(); + switch(selection){ + case "Space": + inputStr = inputStr.replaceAll(" ", ""); + break; + case "Newline": + inputStr = inputStr.replaceAll("\n", ""); + break; + case "Tab": + inputStr = inputStr.replaceAll("\t", ""); + break; + case "All": + inputStr = inputStr.replaceAll("[\n\t\s]*", ""); + break; + default: + throw new IllegalArgumentException("Unkown whitespace type selection"); + } + + return factory.createByteArray(inputStr); + } + else { + return factory.createByteArray(""); + } + + } catch (Exception e) { + return input; + } + } + + @Override + public void createUI() { + this.whitespaceSelection = new JComboBox<>(new String[] { "Space", "Newline", "Tab", "All"}); + this.whitespaceSelection.setSelectedIndex(1); + this.addUIElement("Type: ", this.whitespaceSelection); + } +} diff --git a/src/main/java/de/usd/cstchef/operations/string/Strip.java b/src/main/java/de/usd/cstchef/operations/string/Strip.java new file mode 100644 index 0000000..b61c8b3 --- /dev/null +++ b/src/main/java/de/usd/cstchef/operations/string/Strip.java @@ -0,0 +1,54 @@ +package de.usd.cstchef.operations.string; + +import javax.swing.JComboBox; + +import burp.BurpUtils; +import burp.api.montoya.core.ByteArray; +import de.usd.cstchef.Utils.MessageType; +import de.usd.cstchef.operations.Operation; +import de.usd.cstchef.operations.OperationCategory; +import de.usd.cstchef.operations.Operation.OperationInfos; + +@OperationInfos(name = "Strip", category = OperationCategory.STRING, description = "Strip Whitespace at beginning, end or both") +public class Strip extends Operation { + + JComboBox stripLocationSelection; + + @Override + protected ByteArray perform(ByteArray input, MessageType messageType) throws Exception { + try { + if(input != null) { + String inputStr = input.toString(); + String selection = (String)this.stripLocationSelection.getSelectedItem(); + switch(selection){ + case "Start": + inputStr = inputStr.stripLeading(); + break; + case "End": + inputStr = inputStr.stripTrailing(); + break; + case "Both": + inputStr = inputStr.stripLeading().stripTrailing(); + break; + default: + throw new IllegalArgumentException("Unkown location selection"); + } + + return factory.createByteArray(inputStr); + } + else { + return factory.createByteArray(""); + } + + } catch (Exception e) { + return input; + } + } + + @Override + public void createUI() { + this.stripLocationSelection = new JComboBox<>(new String[] { "Start", "End", "Both"}); + this.stripLocationSelection.setSelectedIndex(0); + this.addUIElement("Strip at: ", this.stripLocationSelection); + } +} From f54dc5f3efc3af78c30a9528a365867aa324f793 Mon Sep 17 00:00:00 2001 From: fhaag95 Date: Mon, 12 Aug 2024 01:20:32 +0200 Subject: [PATCH 3/5] Add placeholder to operations tree search box --- .../java/de/usd/cstchef/view/RecipePanel.java | 19 ++-- .../cstchef/view/ui/PlaceholderTextField.java | 103 ++++++++++++++++++ .../cstchef/view/ui/TextChangedListener.java | 5 + 3 files changed, 115 insertions(+), 12 deletions(-) create mode 100644 src/main/java/de/usd/cstchef/view/ui/PlaceholderTextField.java create mode 100644 src/main/java/de/usd/cstchef/view/ui/TextChangedListener.java diff --git a/src/main/java/de/usd/cstchef/view/RecipePanel.java b/src/main/java/de/usd/cstchef/view/RecipePanel.java index c2bb2b2..fda5eb6 100644 --- a/src/main/java/de/usd/cstchef/view/RecipePanel.java +++ b/src/main/java/de/usd/cstchef/view/RecipePanel.java @@ -43,6 +43,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; +import com.fasterxml.jackson.databind.type.PlaceholderForType; import burp.BurpExtender; import burp.BurpUtils; @@ -65,6 +66,8 @@ import de.usd.cstchef.operations.Operation; import de.usd.cstchef.view.filter.FilterState; import de.usd.cstchef.view.filter.FilterState.BurpOperation; +import de.usd.cstchef.view.ui.PlaceholderTextField; +import de.usd.cstchef.view.ui.TextChangedListener; public class RecipePanel extends JPanel implements ChangeListener { @@ -116,27 +119,19 @@ public RecipePanel(BurpOperation operation, MessageType messageType) { JPanel searchTreePanel = new JPanel(); searchTreePanel.setLayout(new BorderLayout()); - JTextField searchText = new JTextField(); + PlaceholderTextField searchText = new PlaceholderTextField("Search"); searchTreePanel.add(searchText, BorderLayout.PAGE_START); OperationsTree operationsTree = new OperationsTree(); operationsTree.setRootVisible(false); searchTreePanel.add(new JScrollPane(operationsTree)); - searchText.getDocument().addDocumentListener(new DocumentListener() { - @Override - public void removeUpdate(DocumentEvent e) { - operationsTree.search(searchText.getText()); - } - - @Override - public void insertUpdate(DocumentEvent e) { - operationsTree.search(searchText.getText()); - } + searchText.addTextChangedListener(new TextChangedListener() { @Override - public void changedUpdate(DocumentEvent e) { + public void textChanged() { operationsTree.search(searchText.getText()); } + }); // create operations panel diff --git a/src/main/java/de/usd/cstchef/view/ui/PlaceholderTextField.java b/src/main/java/de/usd/cstchef/view/ui/PlaceholderTextField.java new file mode 100644 index 0000000..27c7386 --- /dev/null +++ b/src/main/java/de/usd/cstchef/view/ui/PlaceholderTextField.java @@ -0,0 +1,103 @@ +package de.usd.cstchef.view.ui; + + + +import javax.swing.JTextField; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; + +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; +import java.util.ArrayList; + +public class PlaceholderTextField extends JTextField implements FocusListener, DocumentListener { + + private boolean isPlaceholderSet; + private boolean settingPlaceholder; + private String placeholder; + private ArrayList listeners = new ArrayList(); + + public PlaceholderTextField(){ + super(); + } + + public PlaceholderTextField(String placeholder){ + this(); + this.setPlaceholder(placeholder); + this.isPlaceholderSet = true; + this.settingPlaceholder = false; + this.renderPlaceholder(false); + this.addFocusListener(this); + this.getDocument().addDocumentListener(this); + } + + public void addTextChangedListener(TextChangedListener listener){ + this.listeners.add(listener); + } + + public void removeTextChangedListener(TextChangedListener listener){ + this.listeners.remove(listener); + } + + public String getPlaceholder() { + return placeholder; + } + + public void setPlaceholder(final String s) { + placeholder = s; + } + + @Override + public void focusGained(FocusEvent e) { + if(isPlaceholderSet){ + this.renderPlaceholder(true); + this.isPlaceholderSet = false; + } + } + + @Override + public void focusLost(FocusEvent e) { + if(this.getText() == null || this.getText().isEmpty()){ + this.isPlaceholderSet = true; + this.renderPlaceholder(false); + } + } + + public void renderPlaceholder(boolean emptyPlaceholder){ + this.settingPlaceholder = true; + if(!emptyPlaceholder){ + this.setText(this.getPlaceholder()); + } + else{ + this.setText(""); + } + this.settingPlaceholder = false; + } + + @Override + public void changedUpdate(DocumentEvent arg0) { + if(!this.settingPlaceholder){ + for (TextChangedListener listener : this.listeners) { + listener.textChanged(); + } + } + } + + @Override + public void insertUpdate(DocumentEvent arg0) { + if(!this.settingPlaceholder){ + for (TextChangedListener listener : this.listeners) { + listener.textChanged(); + } + } + } + + @Override + public void removeUpdate(DocumentEvent arg0) { + if(!this.settingPlaceholder){ + for (TextChangedListener listener : this.listeners) { + listener.textChanged(); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/de/usd/cstchef/view/ui/TextChangedListener.java b/src/main/java/de/usd/cstchef/view/ui/TextChangedListener.java new file mode 100644 index 0000000..309a809 --- /dev/null +++ b/src/main/java/de/usd/cstchef/view/ui/TextChangedListener.java @@ -0,0 +1,5 @@ +package de.usd.cstchef.view.ui; + +public interface TextChangedListener { + void textChanged(); +} From eb6b414173c4d1c50f510245354a7490a89ea00c Mon Sep 17 00:00:00 2001 From: fhaag95 Date: Mon, 12 Aug 2024 05:31:11 +0200 Subject: [PATCH 4/5] Name Setter and Extractors more descriptive --- .../de/usd/cstchef/operations/extractors/HttpBodyExtractor.java | 2 +- .../usd/cstchef/operations/extractors/HttpCookieExtractor.java | 2 +- .../de/usd/cstchef/operations/extractors/HttpGetExtractor.java | 2 +- .../usd/cstchef/operations/extractors/HttpHeaderExtractor.java | 2 +- .../de/usd/cstchef/operations/extractors/HttpJsonExtractor.java | 2 +- .../usd/cstchef/operations/extractors/HttpMethodExtractor.java | 2 +- .../cstchef/operations/extractors/HttpMultipartExtractor.java | 2 +- .../de/usd/cstchef/operations/extractors/HttpPostExtractor.java | 2 +- .../de/usd/cstchef/operations/extractors/HttpUriExtractor.java | 2 +- .../de/usd/cstchef/operations/extractors/HttpXmlExtractor.java | 2 +- .../de/usd/cstchef/operations/extractors/JsonExtractor.java | 2 +- .../java/de/usd/cstchef/operations/setter/HttpGetSetter.java | 2 +- .../java/de/usd/cstchef/operations/setter/HttpHeaderSetter.java | 2 +- .../java/de/usd/cstchef/operations/setter/HttpJsonSetter.java | 2 +- .../de/usd/cstchef/operations/setter/HttpMultipartSetter.java | 2 +- .../java/de/usd/cstchef/operations/setter/HttpPostSetter.java | 2 +- src/main/java/de/usd/cstchef/operations/setter/HttpSetBody.java | 2 +- .../java/de/usd/cstchef/operations/setter/HttpSetCookie.java | 2 +- src/main/java/de/usd/cstchef/operations/setter/HttpSetUri.java | 2 +- .../java/de/usd/cstchef/operations/setter/HttpXmlSetter.java | 2 +- src/main/java/de/usd/cstchef/operations/setter/JsonSetter.java | 2 +- src/main/java/de/usd/cstchef/view/RecipeStepPanel.java | 2 +- 22 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/main/java/de/usd/cstchef/operations/extractors/HttpBodyExtractor.java b/src/main/java/de/usd/cstchef/operations/extractors/HttpBodyExtractor.java index 1346583..f7b430e 100644 --- a/src/main/java/de/usd/cstchef/operations/extractors/HttpBodyExtractor.java +++ b/src/main/java/de/usd/cstchef/operations/extractors/HttpBodyExtractor.java @@ -11,7 +11,7 @@ import de.usd.cstchef.operations.OperationCategory; import de.usd.cstchef.operations.Operation.OperationInfos; -@OperationInfos(name = "HTTP Body", category = OperationCategory.EXTRACTORS, description = "Extracts the body of a HTTP messages.") +@OperationInfos(name = "Get HTTP Body", category = OperationCategory.EXTRACTORS, description = "Extracts the body of a HTTP messages.") public class HttpBodyExtractor extends Operation { @Override diff --git a/src/main/java/de/usd/cstchef/operations/extractors/HttpCookieExtractor.java b/src/main/java/de/usd/cstchef/operations/extractors/HttpCookieExtractor.java index 3a4e32e..b7078cb 100644 --- a/src/main/java/de/usd/cstchef/operations/extractors/HttpCookieExtractor.java +++ b/src/main/java/de/usd/cstchef/operations/extractors/HttpCookieExtractor.java @@ -17,7 +17,7 @@ import de.usd.cstchef.operations.OperationCategory; import de.usd.cstchef.view.ui.VariableTextField; -@OperationInfos(name = "HTTP Cookie", category = OperationCategory.EXTRACTORS, description = "Extracts a cookie from a HTTP message.") +@OperationInfos(name = "Get HTTP Cookie", category = OperationCategory.EXTRACTORS, description = "Extracts a cookie from a HTTP message.") public class HttpCookieExtractor extends Operation { protected VariableTextField cookieNameField; diff --git a/src/main/java/de/usd/cstchef/operations/extractors/HttpGetExtractor.java b/src/main/java/de/usd/cstchef/operations/extractors/HttpGetExtractor.java index 2307c7e..90c360d 100644 --- a/src/main/java/de/usd/cstchef/operations/extractors/HttpGetExtractor.java +++ b/src/main/java/de/usd/cstchef/operations/extractors/HttpGetExtractor.java @@ -20,7 +20,7 @@ import de.usd.cstchef.operations.OperationCategory; import de.usd.cstchef.view.ui.VariableTextField; -@OperationInfos(name = "HTTP GET Param", category = OperationCategory.EXTRACTORS, description = "Extracts a GET Parameter of a HTTP request.") +@OperationInfos(name = "Get HTTP GET Param", category = OperationCategory.EXTRACTORS, description = "Extracts a GET Parameter of a HTTP request.") public class HttpGetExtractor extends Operation { protected VariableTextField parameter; diff --git a/src/main/java/de/usd/cstchef/operations/extractors/HttpHeaderExtractor.java b/src/main/java/de/usd/cstchef/operations/extractors/HttpHeaderExtractor.java index 9103516..c6014a3 100644 --- a/src/main/java/de/usd/cstchef/operations/extractors/HttpHeaderExtractor.java +++ b/src/main/java/de/usd/cstchef/operations/extractors/HttpHeaderExtractor.java @@ -9,7 +9,7 @@ import de.usd.cstchef.operations.OperationCategory; import de.usd.cstchef.view.ui.VariableTextField; -@OperationInfos(name = "HTTP Header", category = OperationCategory.EXTRACTORS, description = "Extracts a header of a HTTP message.") +@OperationInfos(name = "Get HTTP Header", category = OperationCategory.EXTRACTORS, description = "Extracts a header of a HTTP message.") public class HttpHeaderExtractor extends Operation { protected VariableTextField headerNameField; diff --git a/src/main/java/de/usd/cstchef/operations/extractors/HttpJsonExtractor.java b/src/main/java/de/usd/cstchef/operations/extractors/HttpJsonExtractor.java index a6cb96b..78c277a 100644 --- a/src/main/java/de/usd/cstchef/operations/extractors/HttpJsonExtractor.java +++ b/src/main/java/de/usd/cstchef/operations/extractors/HttpJsonExtractor.java @@ -11,7 +11,7 @@ import de.usd.cstchef.operations.Operation.OperationInfos; import de.usd.cstchef.operations.OperationCategory; -@OperationInfos(name = "HTTP JSON", category = OperationCategory.EXTRACTORS, description = "Get a JSON value from HTTP message.") +@OperationInfos(name = "Get HTTP JSON", category = OperationCategory.EXTRACTORS, description = "Get a JSON value from HTTP message.") public class HttpJsonExtractor extends Operation { protected JTextField fieldTxt; diff --git a/src/main/java/de/usd/cstchef/operations/extractors/HttpMethodExtractor.java b/src/main/java/de/usd/cstchef/operations/extractors/HttpMethodExtractor.java index 76010bc..dcb458a 100644 --- a/src/main/java/de/usd/cstchef/operations/extractors/HttpMethodExtractor.java +++ b/src/main/java/de/usd/cstchef/operations/extractors/HttpMethodExtractor.java @@ -9,7 +9,7 @@ import de.usd.cstchef.operations.Operation.OperationInfos; import de.usd.cstchef.operations.OperationCategory; -@OperationInfos(name = "HTTP Method", category = OperationCategory.EXTRACTORS, description = "Extracts the method of a HTTP request.") +@OperationInfos(name = "Get HTTP Method", category = OperationCategory.EXTRACTORS, description = "Extracts the method of a HTTP request.") public class HttpMethodExtractor extends Operation { @Override diff --git a/src/main/java/de/usd/cstchef/operations/extractors/HttpMultipartExtractor.java b/src/main/java/de/usd/cstchef/operations/extractors/HttpMultipartExtractor.java index ffd2052..7739743 100644 --- a/src/main/java/de/usd/cstchef/operations/extractors/HttpMultipartExtractor.java +++ b/src/main/java/de/usd/cstchef/operations/extractors/HttpMultipartExtractor.java @@ -9,7 +9,7 @@ import de.usd.cstchef.operations.OperationCategory; import de.usd.cstchef.view.ui.VariableTextField; -@OperationInfos(name = "HTTP Multipart Param", category = OperationCategory.EXTRACTORS, description = "Extracts a part of a multipart/form-data request.") +@OperationInfos(name = "Get HTTP Multipart Param", category = OperationCategory.EXTRACTORS, description = "Extracts a part of a multipart/form-data request.") public class HttpMultipartExtractor extends Operation { protected VariableTextField parameter; diff --git a/src/main/java/de/usd/cstchef/operations/extractors/HttpPostExtractor.java b/src/main/java/de/usd/cstchef/operations/extractors/HttpPostExtractor.java index 6cdfb60..bb32b1f 100644 --- a/src/main/java/de/usd/cstchef/operations/extractors/HttpPostExtractor.java +++ b/src/main/java/de/usd/cstchef/operations/extractors/HttpPostExtractor.java @@ -14,7 +14,7 @@ import de.usd.cstchef.operations.OperationCategory; import de.usd.cstchef.view.ui.VariableTextField; -@OperationInfos(name = "HTTP POST Param", category = OperationCategory.EXTRACTORS, description = "Extracts a POST parameter of a HTTP request.") +@OperationInfos(name = "Get HTTP POST Param", category = OperationCategory.EXTRACTORS, description = "Extracts a POST parameter of a HTTP request.") public class HttpPostExtractor extends Operation { protected VariableTextField parameter; diff --git a/src/main/java/de/usd/cstchef/operations/extractors/HttpUriExtractor.java b/src/main/java/de/usd/cstchef/operations/extractors/HttpUriExtractor.java index bdcc24c..a643c4a 100644 --- a/src/main/java/de/usd/cstchef/operations/extractors/HttpUriExtractor.java +++ b/src/main/java/de/usd/cstchef/operations/extractors/HttpUriExtractor.java @@ -16,7 +16,7 @@ import de.usd.cstchef.operations.Operation.OperationInfos; import de.usd.cstchef.operations.OperationCategory; -@OperationInfos(name = "HTTP URI", category = OperationCategory.EXTRACTORS, description = "Extracts the URI of a HTTP request.") +@OperationInfos(name = "Get HTTP URI", category = OperationCategory.EXTRACTORS, description = "Extracts the URI of a HTTP request.") public class HttpUriExtractor extends Operation { protected JCheckBox checkbox; diff --git a/src/main/java/de/usd/cstchef/operations/extractors/HttpXmlExtractor.java b/src/main/java/de/usd/cstchef/operations/extractors/HttpXmlExtractor.java index 9d09fac..646645c 100644 --- a/src/main/java/de/usd/cstchef/operations/extractors/HttpXmlExtractor.java +++ b/src/main/java/de/usd/cstchef/operations/extractors/HttpXmlExtractor.java @@ -21,7 +21,7 @@ import de.usd.cstchef.operations.Operation.OperationInfos; import de.usd.cstchef.operations.OperationCategory; -@OperationInfos(name = "HTTP XML", category = OperationCategory.EXTRACTORS, description = "Extract the first occurrence of a XML value from HTTP message.") +@OperationInfos(name = "Get HTTP XML", category = OperationCategory.EXTRACTORS, description = "Extract the first occurrence of a XML value from HTTP message.") public class HttpXmlExtractor extends Operation { protected JTextField fieldTxt; diff --git a/src/main/java/de/usd/cstchef/operations/extractors/JsonExtractor.java b/src/main/java/de/usd/cstchef/operations/extractors/JsonExtractor.java index 0a91062..6685e4c 100644 --- a/src/main/java/de/usd/cstchef/operations/extractors/JsonExtractor.java +++ b/src/main/java/de/usd/cstchef/operations/extractors/JsonExtractor.java @@ -14,7 +14,7 @@ import de.usd.cstchef.operations.Operation.OperationInfos; import de.usd.cstchef.operations.OperationCategory; -@OperationInfos(name = "JSON", category = OperationCategory.EXTRACTORS, description = "Extracts values of JSON objects.") +@OperationInfos(name = "Get JSON", category = OperationCategory.EXTRACTORS, description = "Extracts values of JSON objects.") public class JsonExtractor extends Operation { private static JsonProvider provider; diff --git a/src/main/java/de/usd/cstchef/operations/setter/HttpGetSetter.java b/src/main/java/de/usd/cstchef/operations/setter/HttpGetSetter.java index 14339c3..60546fc 100644 --- a/src/main/java/de/usd/cstchef/operations/setter/HttpGetSetter.java +++ b/src/main/java/de/usd/cstchef/operations/setter/HttpGetSetter.java @@ -10,7 +10,7 @@ import de.usd.cstchef.operations.Operation.OperationInfos; import de.usd.cstchef.operations.OperationCategory; -@OperationInfos(name = "HTTP GET Param", category = OperationCategory.SETTER, description = "Sets a GET parameter to the specified value.") +@OperationInfos(name = "Set HTTP GET Param", category = OperationCategory.SETTER, description = "Sets a GET parameter to the specified value.") public class HttpGetSetter extends SetterOperation { private JCheckBox addIfNotPresent; diff --git a/src/main/java/de/usd/cstchef/operations/setter/HttpHeaderSetter.java b/src/main/java/de/usd/cstchef/operations/setter/HttpHeaderSetter.java index b08524c..0b394c8 100644 --- a/src/main/java/de/usd/cstchef/operations/setter/HttpHeaderSetter.java +++ b/src/main/java/de/usd/cstchef/operations/setter/HttpHeaderSetter.java @@ -16,7 +16,7 @@ import de.usd.cstchef.operations.OperationCategory; import de.usd.cstchef.operations.extractors.JsonExtractor; -@OperationInfos(name = "HTTP Header", category = OperationCategory.SETTER, description = "Set a HTTP header to the specified value.") +@OperationInfos(name = "Set HTTP Header", category = OperationCategory.SETTER, description = "Set a HTTP header to the specified value.") public class HttpHeaderSetter extends SetterOperation { private JCheckBox addIfNotPresent; diff --git a/src/main/java/de/usd/cstchef/operations/setter/HttpJsonSetter.java b/src/main/java/de/usd/cstchef/operations/setter/HttpJsonSetter.java index 4f6f643..2008b06 100644 --- a/src/main/java/de/usd/cstchef/operations/setter/HttpJsonSetter.java +++ b/src/main/java/de/usd/cstchef/operations/setter/HttpJsonSetter.java @@ -25,7 +25,7 @@ import de.usd.cstchef.operations.extractors.JsonExtractor; import de.usd.cstchef.view.ui.VariableTextField; -@OperationInfos(name = "HTTP JSON", category = OperationCategory.SETTER, description = "Set a JSON parameter to the specified value.") +@OperationInfos(name = "Set HTTP JSON", category = OperationCategory.SETTER, description = "Set a JSON parameter to the specified value.") public class HttpJsonSetter extends SetterOperation { private JCheckBox addIfNotPresent; diff --git a/src/main/java/de/usd/cstchef/operations/setter/HttpMultipartSetter.java b/src/main/java/de/usd/cstchef/operations/setter/HttpMultipartSetter.java index 9607ffb..4e04262 100644 --- a/src/main/java/de/usd/cstchef/operations/setter/HttpMultipartSetter.java +++ b/src/main/java/de/usd/cstchef/operations/setter/HttpMultipartSetter.java @@ -8,7 +8,7 @@ import de.usd.cstchef.operations.Operation.OperationInfos; import de.usd.cstchef.operations.OperationCategory; -@OperationInfos(name = "HTTP Multipart Param", category = OperationCategory.SETTER, description = "Sets a part of a multipart/form-data request to the specified value.") +@OperationInfos(name = "Set HTTP Multipart Param", category = OperationCategory.SETTER, description = "Sets a part of a multipart/form-data request to the specified value.") public class HttpMultipartSetter extends SetterOperation { @Override diff --git a/src/main/java/de/usd/cstchef/operations/setter/HttpPostSetter.java b/src/main/java/de/usd/cstchef/operations/setter/HttpPostSetter.java index 593c2f8..582fb37 100644 --- a/src/main/java/de/usd/cstchef/operations/setter/HttpPostSetter.java +++ b/src/main/java/de/usd/cstchef/operations/setter/HttpPostSetter.java @@ -10,7 +10,7 @@ import de.usd.cstchef.operations.Operation.OperationInfos; import de.usd.cstchef.operations.OperationCategory; -@OperationInfos(name = "HTTP POST Param", category = OperationCategory.SETTER, description = "Set a POST parameter to the specified value.") +@OperationInfos(name = "Set HTTP POST Param", category = OperationCategory.SETTER, description = "Set a POST parameter to the specified value.") public class HttpPostSetter extends SetterOperation { private JCheckBox addIfNotPresent; diff --git a/src/main/java/de/usd/cstchef/operations/setter/HttpSetBody.java b/src/main/java/de/usd/cstchef/operations/setter/HttpSetBody.java index c7e5acc..ca36e11 100644 --- a/src/main/java/de/usd/cstchef/operations/setter/HttpSetBody.java +++ b/src/main/java/de/usd/cstchef/operations/setter/HttpSetBody.java @@ -16,7 +16,7 @@ import de.usd.cstchef.operations.Operation.OperationInfos; import de.usd.cstchef.view.ui.FormatTextField; -@OperationInfos(name = "HTTP Body", category = OperationCategory.SETTER, description = "Set the HTTP body to the specified value.") +@OperationInfos(name = "Set HTTP Body", category = OperationCategory.SETTER, description = "Set the HTTP body to the specified value.") public class HttpSetBody extends Operation { private FormatTextField replacementTxt; diff --git a/src/main/java/de/usd/cstchef/operations/setter/HttpSetCookie.java b/src/main/java/de/usd/cstchef/operations/setter/HttpSetCookie.java index 21969b0..4b84b57 100644 --- a/src/main/java/de/usd/cstchef/operations/setter/HttpSetCookie.java +++ b/src/main/java/de/usd/cstchef/operations/setter/HttpSetCookie.java @@ -18,7 +18,7 @@ import de.usd.cstchef.operations.Operation.OperationInfos; import de.usd.cstchef.operations.OperationCategory; -@OperationInfos(name = "HTTP Cookie", category = OperationCategory.SETTER, description = "Set a HTTP cookie to the specified value.") +@OperationInfos(name = "Set HTTP Cookie", category = OperationCategory.SETTER, description = "Set a HTTP cookie to the specified value.") public class HttpSetCookie extends SetterOperation { private JCheckBox addIfNotPresent; diff --git a/src/main/java/de/usd/cstchef/operations/setter/HttpSetUri.java b/src/main/java/de/usd/cstchef/operations/setter/HttpSetUri.java index 607882b..0218603 100644 --- a/src/main/java/de/usd/cstchef/operations/setter/HttpSetUri.java +++ b/src/main/java/de/usd/cstchef/operations/setter/HttpSetUri.java @@ -15,7 +15,7 @@ import de.usd.cstchef.operations.OperationCategory; import de.usd.cstchef.view.ui.VariableTextField; -@OperationInfos(name = "HTTP URI", category = OperationCategory.SETTER, description = "Sets the specified variable as the uri.") +@OperationInfos(name = "Set HTTP URI", category = OperationCategory.SETTER, description = "Sets the specified variable as the uri.") public class HttpSetUri extends Operation { private VariableTextField uriTxt; diff --git a/src/main/java/de/usd/cstchef/operations/setter/HttpXmlSetter.java b/src/main/java/de/usd/cstchef/operations/setter/HttpXmlSetter.java index 363a6ef..644d644 100644 --- a/src/main/java/de/usd/cstchef/operations/setter/HttpXmlSetter.java +++ b/src/main/java/de/usd/cstchef/operations/setter/HttpXmlSetter.java @@ -29,7 +29,7 @@ import de.usd.cstchef.operations.OperationCategory; import de.usd.cstchef.view.ui.VariableTextField; -@OperationInfos(name = "HTTP XML", category = OperationCategory.SETTER, description = "Set a XML parameter to the specified value.") +@OperationInfos(name = "Set HTTP XML", category = OperationCategory.SETTER, description = "Set a XML parameter to the specified value.") public class HttpXmlSetter extends SetterOperation { @Override diff --git a/src/main/java/de/usd/cstchef/operations/setter/JsonSetter.java b/src/main/java/de/usd/cstchef/operations/setter/JsonSetter.java index 07ec9f0..2269d50 100644 --- a/src/main/java/de/usd/cstchef/operations/setter/JsonSetter.java +++ b/src/main/java/de/usd/cstchef/operations/setter/JsonSetter.java @@ -15,7 +15,7 @@ import de.usd.cstchef.operations.OperationCategory; import de.usd.cstchef.view.ui.VariableTextField; -@OperationInfos(name = "JSON", category = OperationCategory.SETTER, description = "Set the value of a JSON object.") +@OperationInfos(name = "Set JSON", category = OperationCategory.SETTER, description = "Set the value of a JSON object.") public class JsonSetter extends SetterOperation implements ActionListener { private JCheckBox addIfNotPresent; diff --git a/src/main/java/de/usd/cstchef/view/RecipeStepPanel.java b/src/main/java/de/usd/cstchef/view/RecipeStepPanel.java index f479220..fee51d6 100644 --- a/src/main/java/de/usd/cstchef/view/RecipeStepPanel.java +++ b/src/main/java/de/usd/cstchef/view/RecipeStepPanel.java @@ -48,7 +48,7 @@ public class RecipeStepPanel extends JPanel { public RecipeStepPanel(String title, ChangeListener changelistener) { this.changeListener = changelistener; this.setLayout(new BorderLayout()); - this.setPreferredSize(new Dimension(300, 0)); + this.setPreferredSize(new Dimension(350, 0)); // header Box headerBox = Box.createHorizontalBox(); From 57746cdfc03fe17d4ebfde026a8a6aff53e25899 Mon Sep 17 00:00:00 2001 From: fhaag95 Date: Mon, 12 Aug 2024 13:08:21 +0200 Subject: [PATCH 5/5] Add expand and collpase all buttons to operations tree --- .../de/usd/cstchef/view/OperationsTree.java | 14 ++++++++++++ .../java/de/usd/cstchef/view/RecipePanel.java | 22 +++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/src/main/java/de/usd/cstchef/view/OperationsTree.java b/src/main/java/de/usd/cstchef/view/OperationsTree.java index 8a75bd3..45f7bb1 100644 --- a/src/main/java/de/usd/cstchef/view/OperationsTree.java +++ b/src/main/java/de/usd/cstchef/view/OperationsTree.java @@ -159,6 +159,20 @@ private void expandAll(TreePath path) { this.expandPath(path); } + public void expandAll(){ + for(int i = 0; i < this.getRowCount(); i++){ + TreePath path = this.getPathForRow(i); + this.expandAll(path); + } + } + + public void collapseAll(){ + for(int i = 0; i < this.getRowCount(); i++){ + TreePath path = this.getPathForRow(i); + this.collapsePath(path); + } + } + public class CustomTreeUI extends BasicTreeUI { @Override protected boolean shouldPaintExpandControl(javax.swing.tree.TreePath path, int row, boolean isExpanded, diff --git a/src/main/java/de/usd/cstchef/view/RecipePanel.java b/src/main/java/de/usd/cstchef/view/RecipePanel.java index fda5eb6..b2b015f 100644 --- a/src/main/java/de/usd/cstchef/view/RecipePanel.java +++ b/src/main/java/de/usd/cstchef/view/RecipePanel.java @@ -25,6 +25,7 @@ import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JCheckBox; +import javax.swing.JComponent; import javax.swing.JFileChooser; import javax.swing.JLabel; import javax.swing.JOptionPane; @@ -34,6 +35,7 @@ import javax.swing.JTextField; import javax.swing.SwingUtilities; import javax.swing.ToolTipManager; +import javax.swing.border.Border; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.event.DocumentEvent; @@ -133,6 +135,26 @@ public void textChanged() { } }); + JPanel btnContainer = new JPanel(); + JButton expandAll = new JButton("+"); + expandAll.setToolTipText("Expand all operations"); + expandAll.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + operationsTree.expandAll(); + } + }); + JButton collapseAll = new JButton("-"); + collapseAll.setToolTipText("Collapse all operations"); + collapseAll.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + operationsTree.collapseAll(); + } + }); + btnContainer.add(expandAll); + btnContainer.add(collapseAll); + searchTreePanel.add(btnContainer, BorderLayout.PAGE_END); // create operations panel JPanel operationsPanel = new LayoutPanel("Operations");