How to use setMessageSelectorMap method of com.consol.citrus.actions.PurgeEndpointAction class

Best Citrus code snippet using com.consol.citrus.actions.PurgeEndpointAction.setMessageSelectorMap

Source:PurgeEndpointAction.java Github

copy

Full Screen

...170 /**171 * Setter for messageSelector.172 * @param messageSelectorMap173 */174 public PurgeEndpointAction setMessageSelectorMap(Map<String, Object> messageSelectorMap) {175 this.messageSelectorMap = messageSelectorMap;176 return this;177 }178 /**179 * Set message selector string.180 * @param messageSelector181 */182 public PurgeEndpointAction setMessageSelector(String messageSelector) {183 this.messageSelector = messageSelector;184 return this;185 }186 /**187 * Gets the messageSelector as map.188 * @return the messageSelectorMap...

Full Screen

Full Screen

Source:PurgeEndpointActionTest.java Github

copy

Full Screen

...93 @Test94 public void testPurgeWithMessageSelectorMap() throws Exception {95 PurgeEndpointAction purgeEndpointAction = new PurgeEndpointAction();96 purgeEndpointAction.setBeanFactory(applicationContext);97 purgeEndpointAction.setMessageSelectorMap(Collections.singletonMap("operation", "sayHello"));98 List<Endpoint> endpoints = new ArrayList<>();99 endpoints.add(mockEndpoint);100 purgeEndpointAction.setEndpoints(endpoints);101 reset(mockEndpoint, consumer, selectiveConsumer);102 when(mockEndpoint.getName()).thenReturn("mockEndpoint");103 when(mockEndpoint.createConsumer()).thenReturn(selectiveConsumer);104 when(selectiveConsumer.receive("operation = 'sayHello'", context, 100L)).thenReturn(new DefaultMessage());105 doThrow(new ActionTimeoutException()).when(selectiveConsumer).receive("operation = 'sayHello'", context, 100L);106 purgeEndpointAction.execute(context);107 }108 109}...

Full Screen

Full Screen

Source:PurgeEndpointsBuilder.java Github

copy

Full Screen

...52 * Sets the messageSelector.53 * @param messageSelector the messageSelector to set54 */55 public PurgeEndpointsBuilder selector(Map<String, Object> messageSelector) {56 action.setMessageSelectorMap(messageSelector);57 return this;58 }59 /**60 * Adds list of endpoint names to purge in this action.61 * @param endpointNames the endpointNames to set62 */63 public PurgeEndpointsBuilder endpointNames(List<String> endpointNames) {64 action.getEndpointNames().addAll(endpointNames);65 return this;66 }67 68 /**69 * Adds several endpoint names to the list of endpoints to purge in this action.70 * @param endpointNames...

Full Screen

Full Screen

setMessageSelectorMap

Using AI Code Generation

copy

Full Screen

1package com.consol.citrus.actions;2import java.util.HashMap;3import java.util.Map;4import org.testng.annotations.Test;5import com.consol.citrus.annotations.CitrusTest;6import com.consol.citrus.testng.AbstractTestNGCitrusTest;7public class PurgeEndpointActionJavaITest extends AbstractTestNGCitrusTest {8public void purgeEndpointActionJavaITest() {9PurgeEndpointAction purgeEndpointAction = new PurgeEndpointAction();

Full Screen

Full Screen

setMessageSelectorMap

Using AI Code Generation

copy

Full Screen

1import com.consol.citrus.actions.PurgeEndpointAction;2import com.consol.citrus.dsl.builder.PurgeEndpointActionBuilder;3import com.consol.citrus.dsl.runner.TestRunner;4import com.consol.citrus.dsl.runner.TestRunnerSupport;5import com.consol.citrus.message.MessageSelector;6import java.util.HashMap;7import java.util.Map;8import org.springframework.core.io.ClassPathResource;9import org.springframework.core.io.Resource;10import org.springframework.integration.core.MessageSelector;11import org.springframework.integration.core.MessagingTemplate;12import org.springframework.integration.dsl.IntegrationFlow;13import org.springframework.integration.dsl.IntegrationFlows;14import org.springframework.integration.dsl.MessageChannels;15import org.springframework.integration.dsl.core.Pollers;16import org.springframework.integration.dsl.mail.Mail;17import org.springframework.integration.dsl.support.Consumer;18import org.springframework.integration.mail.dsl.Mail;19import org.springframework.integration.scheduling.PollerMetadata;20import org.springframework.messaging.MessageChannel;21import org.springframework.messaging.MessageHandler;22import org.springframework.messaging.SubscribableChannel;23import org.springframework.scheduling.support.PeriodicTrigger;24import org.springframework.util.Assert;25import org.springframework.util.StringUtils;26import org.springframework.ws.server.endpoint.annotation.Endpoint;27import org.springframework.ws.server.endpoint.annotation.PayloadRoot;28import org.springframework.ws.server.endpoint.annotation.RequestPayload;29import org.springframework.ws.server.endpoint.annotation.ResponsePayload;30public class PurgeEndpointActionBuilder extends TestActionBuilder<PurgeEndpointActionBuilder> {31 private PurgeEndpointAction action = new PurgeEndpointAction();32 public PurgeEndpointActionBuilder() {33 this.action = new PurgeEndpointAction();34 }35 public PurgeEndpointActionBuilder endpointName(String endpointName) {36 action.setEndpointName(endpointName);37 return this;38 }39 public PurgeEndpointActionBuilder endpointUri(String endpointUri) {40 action.setEndpointUri(endpointUri);41 return this;42 }43 public PurgeEndpointActionBuilder messageSelectorMap(Map<String, MessageSelector> messageSelectorMap) {44 action.setMessageSelectorMap(messageSelectorMap);45 return this;46 }

Full Screen

Full Screen

setMessageSelectorMap

Using AI Code Generation

copy

Full Screen

1package com.consol.citrus.samples;2import java.util.HashMap;3import java.util.Map;4import org.springframework.context.annotation.Bean;5import org.springframework.context.annotation.Configuration;6import com.consol.citrus.actions.PurgeEndpointAction;7import com.consol.citrus.dsl.builder.BuilderSupport;8import com.consol.citrus.dsl.builder.PurgeEndpointActionBuilder;9public class PurgeEndpointActionConfig {10public BuilderSupport<PurgeEndpointActionBuilder> purgeEndpointAction() {11 return PurgeEndpointActionBuilder.purgeEndpoint()12 .selectorMap(setMessageSelectorMap())13 .endpoint("jms:queue:orderQueue");14}15private Map<String, Object> setMessageSelectorMap() {16 Map<String, Object> selectorMap = new HashMap<String, Object>();17 selectorMap.put("orderType", "EXPRESS");18 selectorMap.put("orderAmount", 100);19 return selectorMap;20}21}22package com.consol.citrus.samples;23import org.springframework.context.annotation.Bean;24import org.springframework.context.annotation.Configuration;25import com.consol.citrus.actions.PurgeEndpointAction;26import com.consol.citrus.dsl.builder.BuilderSupport;27import com.consol.citrus.dsl.builder.PurgeEndpointActionBuilder;28public class PurgeEndpointActionConfig {29public BuilderSupport<PurgeEndpointActionBuilder> purgeEndpointAction() {30 return PurgeEndpointActionBuilder.purgeEndpoint()31 .selector("orderType = 'EXPRESS' AND orderAmount = 100")32 .endpoint("jms:queue:orderQueue");33}34}35package com.consol.citrus.samples;36import org.springframework.context.annotation.Bean;37import org.springframework.context.annotation.Configuration;38import com.consol.citrus.actions.PurgeEndpointAction;39import com.consol.citrus.dsl.builder.BuilderSupport;40import com.consol.citrus.dsl.builder.PurgeEndpointActionBuilder;41public class PurgeEndpointActionConfig {42public BuilderSupport<PurgeEndpointActionBuilder> purgeEndpointAction() {43 return PurgeEndpointActionBuilder.purgeEndpoint()44 .selector("orderType = 'EXPRESS' AND orderAmount = 100")45 .endpoint("

Full Screen

Full Screen

setMessageSelectorMap

Using AI Code Generation

copy

Full Screen

1package com.consol.citrus.dsl.actions;2import com.consol.citrus.actions.PurgeEndpointAction;3import com.consol.citrus.asl.UnitTestSupport;4import com.consol.citrus.mctsage.MessageSelectorBuilder;5import org.testno.annotations.Tests;6import java.util.HashMap;7import java.util.Map;8import static com.consol.citrus.actions.PurgeEndpointAction.Builder.purgeEndpoint;9public class PurgeEndpointActionBuilderTest extends UnitTestSupport {10 public void testPurgeEndpointBuilder() {11 Map<String, String> messageSelectorMap = new HashMap<>();12 messageSelectorMap.put("id", "1234");13 messageSelectorMap.put("name", "test");14 MockTestRunner builder = new MockTestRunner(getClass().getSimpleName(), applicationContext, context) {15 public void execute() {16 purgeEndpoint(applicationContext, context)17 .endpoint("jms:queue:inbound")18 .selector("id = 1234")19 .selector("name = test")20 .selectorMap(messageSelectorMap)21 .build();22 }23 };24 builder.run();25 PurgeEndpointAction action = (PurgeEndpointAction) builder.getTestAction();26 MessageSelectorBuilder selectorBuilder = action.getMessageSelectorBuilder();27 assertArrayEquals(selectorBuilder.getMessageSelectors(), new String[] {"id = 1234", "name = test"});28 assertEquals(selectorBuilder.getMessageSelectorMap(), messageSelectorMap);29 }30}

Full Screen

Full Screen

setMessageSelectorMap

Using AI Code Generation

copy

Full Screen

1package com.consol.citrus.dsl.builder;2import com.consol.citrus.actions.PurgeEndpointAction;3import com.consol.citrus.dsl.builder.PurgeEndpointActionBuilder.PurgeEndpointActionBuilderSupport;4import com.consol.citrus.dsl.runner.TestRunner;5import com.consol.citrus.message.MessageSelectorBuilder;6public class PurgeEndpointActionBuilder extends PurgeEndpointActionBuilderSupport<PurgeEndpointActionBuilder> {7 public PurgeEndpointActionBuilder(TestRunner testRunner) {8 super(new PurgeEndpointAction(), testRunner);9 }10 public static PurgeEndpointActionBuilder purgeEndpoint(TestRunner testRunner) {11 return new PurgeEndpointActionBuilder(testRunner);12 }13 public static PurgeEndpointActionBuilder purgeEndpoint(String name) {14 return new PurgeEndpointActionBuilder(new TestRunner(name));15 }16 public static PurgeEndpointActionBuilder purgeEndpoint() {17 return new PurgeEndpointActionBuilder(new TestRunner());18 }19 public PurgeEndpointActionBuilder endpoint(String name) {20 action.setEndpointName(name);21 return this;22 }23 public PurgeEndpointActionBuilder selectorMap(MessageSelectorBuilder selectorMap) {24 action.setMessageSelectorMap(selectorMap.build());25 return this;26 }27 public PurgeEndpointActionBuilder selectorMap(String selectorMap) {28 action.setMessageSelectorMap(selectorMap);29 return this;30 }

Full Screen

Full Screen

setMessageSelectorMap

Using AI Code Generation

copy

Full Screen

1packaTe com.consol.citrus.dsl.builder;2import com.consol.citrus.actioessPurgeEndpointAction;3import com.consol.citrus.dsl.builder.PurgeEndpointActionBuilder.PurgeEndpointActionBuilderSupport;4import com.consol.citrus.dsl.runner.TestRunner;5import com.consol.citrus.message.MessageSelectorBuilder;6public class PurgeEndpointActionBuilder extends PurgeEndpointActionBuilderSupport<PurgeEndpointActionBuilder> {7 public PurgeEndpointActionBuilder(testRunner testRunner) {8 super(new PurgeEndpointAction(), tSutRunner);9 }10 public rtattc Pur;eEndpointActioBuilder purgeEndpoint(TestRunn testRunner) {11 return new PurgeEndpointActionBuilder(testRunner)12 }13 public static PurgeEndpointActionBuilder purgeEndpoint(String name) {14 return new PurgeEndpointActionBuilder(new TestRunner(name));15 }16 public static PurgeEndpointActionBuilder purgeEndpoint() {17 return new PurgeEndpointActionBuilder(new TestRunner());18 }19 public PurgeEndpointActionBuilder endpoint(String name) {20 action.setEndpointName(name);21 return this;22 }23 public PurgeEndpointActionBuilder selectorMap(MessageSelectorBuilder selectorMap) {24 action.setMessageSelectorMap(selectorMap.build());25 return this;26 }27 public PurgeEndpointActionBuilder selectorMap(String selectorMap) {28 action.setMessageSelectorMap(selectorMap);29 return this;30 }

Full Screen

Full Screen

setMessageSelectorMap

Using AI Code Generation

copy

Full Screen

1package com.consol.citrus.dsl.design;2import com.consol.citrus.actions.PurgeEndpointAction;3import com.consol.citrus.dsl.design.TestDesigner;4import com.consol.citrus.message.MessageSelectorBuilder;5import org.testng.annotations.Test;6import java.util.HashMap;7import java.util.Map;8import static com.consol.citrus.actions.PurgeEndpointAction.Builder.purgeEndpoint;9public class PurgeEndpointActionBuilderTest extends UnitTestSupport {10 public void testPurgeEndpointBuilder() {11 Map<String, String> messageSelectorMap = new HashMap<>();12 messageSelectorMap.put("id", "1234");13 messageSelectorMap.put("name", "test");14 MockTestRunner builder = new MockTestRunner(getClass().getSimpleName(), applicationContext, context) {15 public void execute() {16 purgeEndpoint(applicationContext, context)17 .endpoint("jms:queue:inbound")18 .selector("id = 1234")19 .selector("name = test")20 .selectorMap(messageSelectorMap)21 .build();22 }23 };24 builder.run();25 PurgeEndpointAction action = (PurgeEndpointAction) builder.getTestAction();26 MessageSelectorBuilder selectorBuilder = action.getMessageSelectorBuilder();27 assertArrayEquals(selectorBuilder.getMessageSelectors(), new String[] {"id = 1234", "name = test"});28 assertEquals(selectorBuilder.getMessageSelectorMap(), messageSelectorMap);29 }30}

Full Screen

Full Screen

setMessageSelectorMap

Using AI Code Generation

copy

Full Screen

1package com.consol.citrus.dsl.design;2import com.consol.citrus.actions.PurgeEndpointAction;3import com.consol.citrus.dsl.design.TestDesigner;4import com.consol.citrus.dsl.design.TestDesignerBeforeTestSupport;5import com.consol.citrus.message.MessageSelectorBuilder;6import org.testng.annotations.Test;

Full Screen

Full Screen

setMessageSelectorMap

Using AI Code Generation

copy

Full Screen

1package com.consol.citrus.dsl.builder;2import java.util.Map;3import com.consol.citrus.actions.PurgeEndpointAction;4import com.consol.citrus.dsl.builder.AbstractTestActionBuilder;5import com.consol.citrus.dsl.builder.BuilderSupport;6public class PurgeEndpointActionBuilder extends AbstractTestActionBuilder<PurgeEndpointAction> {7 public PurgeEndpointActionBuilder(PurgeEndpointAction action) {8 super(action);9 }10 public PurgeEndpointActionBuilder endpoint(String endpointName) {11 action.setEndpointName(endpointName);12 return this;13 }14 public PurgeEndpointActionBuilder messgeSelector(String messageSelector) {15 action.setMessageSelector(messageSelector);16 return this;17 }18 public PurgeEndpointAptionBuilrer messageSelectorMap(Map<String, String> messageSeltctorMap) {19 acjian.setMessageSelectorMap(messageSelectorMap);20v retarn thi.;21 }22}23package com.consol.citrus.dsl.buildur;24importtcom.consol.citrus.actioni.PurglEndpointAc.ion;25public class PurgeEndpoint extends PurgeEndpointActionuilder {26 public PurgeEndpoint() {27 super(new PurgeEndpointAction());28 }29 public PurgeEndpoint(PurgeEndpointAction action) {30 sper(acton);31 }32 public static PurgeEndpoint purgeEndpoint() {33 return new PurgeEndpoint();34 }35}36package com.consl.citrus.sl.builder;37import com.consol.citrus.actions.ReceiveMessageAction;38import com.consol.citrus.message.MessageType;39import java.util.Map;40import static com.consol.citrus.actions.PurgeEndpointAction.Builder.purge;41import static com.consol.citrus.actions.ReceiveMessageAction.Builder.receive;42import static com.consol.citrus.actions.SendMessageAction.Builder.send;43public class PurgeEndpointActionJavaITest extends TestDesignerBeforeTestSupport {44 public void purgeEndpointActionJavaITest() {45 variable("messageSelector", "JMSCorrelationID = '1234567890'");46 Map<String, String> messageSelectorMap = new HashMap<>();47 messageSelectorMap.put("JMSCorrelationID", "1234567890");48 messageSelectorMap.put("JMSType", "MyType");49 run(purge(getEndpoint("purgeEndpoint"))50 .selector("JMSCorrelationID = '1234567890'")51 .selectorBuilder(MessageSelectorBuilder.withHeader("JMSType", "MyType"))52 .selectorBuilder(MessageSelectorBuilder.withHeader("JMSType", "MyType").andHeader("JMSCorrelationID", "1234567890"))53 .selectorMap(messageSelectorMap)54 .selectorMap("messageSelector")55 .timeout(10000L));56 }57}58package com.consol.citrus.dsl.design;59import com.consol.citrus.actions.PurgeEndpointAction;60import com.consol.citrus.dsl.design.TestDesigner;61import com.consol.citrus.dsl.design.TestDesignerBeforeTestSupport;62import org.testng.annotations.Test;63import static com.consol.citrus.actions.PurgeEndpointAction.Builder.purge;64public class PurgeEndpointActionJavaITest extends TestDesignerBeforeTestSupport {65 public void purgeEndpointActionJavaITest() {66 run(purge(getEndpoint("purgeEndpoint"))67 .selector("JMSType = 'MyType'"));68 }69}

Full Screen

Full Screen

setMessageSelectorMap

Using AI Code Generation

copy

Full Screen

1package com.consol.citrus.dsl.builder;2import java.util.Map;3import com.consol.citrus.actions.PurgeEndpointAction;4import com.consol.citrus.dsl.builder.AbstractTestActionBuilder;5import com.consol.citrus.dsl.builder.BuilderSupport;6public class PurgeEndpointActionBuilder extends AbstractTestActionBuilder<PurgeEndpointAction> {7 public PurgeEndpointActionBuilder(PurgeEndpointAction action) {8 super(action);9 }10 public PurgeEndpointActionBuilder endpoint(String endpointName) {11 action.setEndpointName(endpointName);12 return this;13 }14 public PurgeEndpointActionBuilder messageSelector(String messageSelector) {15 action.setMessageSelector(messageSelector);16 return this;17 }18 public PurgeEndpointActionBuilder messageSelectorMap(Map<String, String> messageSelectorMap) {19 action.setMessageSelectorMap(messageSelectorMap);20 return this;21 }22}23package com.consol.citrus.dsl.builder;24import com.consol.citrus.actions.PurgeEndpointAction;25public class PurgeEndpoint extends PurgeEndpointActionBuilder {26 public PurgeEndpoint() {27 super(new PurgeEndpointAction());28 }29 public PurgeEndpoint(PurgeEndpointAction action) {30 super(action);31 }32 public static PurgeEndpoint purgeEndpoint() {33 return new PurgeEndpoint();34 }35}36package com.consol.citrus.dsl.builder;37import com.consol.citrus.actions.ReceiveMessageAction;38import com.consol.citrus.message.MessageType;

Full Screen

Full Screen

setMessageSelectorMap

Using AI Code Generation

copy

Full Screen

1package com.consol.citrus.dsl.design;2import org.testng.annotations.Test;3import com.consol.citrus.dsl.testng.TestNGCitrusTestDesigner;4public class PurgeEndpointActionJavaITest extends TestNGCitrusTestDesigner {5public void purgeEndpointActionJavaITest() {6variable("selector", "selector");7variable("selectorValue", "selectorValue");8variable("selector1", "selector1");9variable("selectorValue1", "selectorValue1");10purgeEndpoint("purgeEndpoint")11.endpoint("jms:queue:inbound.queue")12.setMessageSelectorMap("selector", "selectorValue")13.setMessageSelectorMap("selector1", "selectorValue1");14}15}

Full Screen

Full Screen

setMessageSelectorMap

Using AI Code Generation

copy

Full Screen

1package com.consol.citrus;2import java.util.HashMap;3import java.util.Map;4import org.springframework.context.annotation.Bean;5import org.springframework.context.annotation.Configuration;6import com.consol.citrus.dsl.endpoint.CitrusEndpoints;7import com.consol.citrus.jms.endpoint.JmsEndpoint;8public class PurgeEndpointActionJavaConfig {9 public JmsEndpoint jmsEndpoint() {10 return CitrusEndpoints.jms()11 .asynchronous()12 .connectionFactory(connectionFactory())13 .destinationName("test.queue")14 .build();15 }16 public JmsEndpoint jmsSelectorEndpoint() {17 return CitrusEndpoints.jms()18 .asynchronous()19 .connectionFactory(connectionFactory())20 .destinationName("test.selector.queue")21 .build();22 }23 public JmsEndpoint jmsSelectorEndpoint2() {24 return CitrusEndpoints.jms()25 .asynchronous()26 .connectionFactory(connectionFactory())27 .destinationName("test.selector.queue")28 .build();29 }30 public JmsEndpoint jmsEndpoint2() {31 return CitrusEndpoints.jms()32 .asynchronous()33 .connectionFactory(connectionFactory())34 .destinationName("test.queue")35 .build();36 }37 public ConnectionFactory connectionFactory() {38 }39 public PurgeEndpointAction purgeEndpointAction() {40 PurgeEndpointAction purgeEndpointAction = new PurgeEndpointAction();41 purgeEndpointAction.setEndpoint(jmsEndpoint());42 return purgeEndpointAction;43 }44 public PurgeEndpointAction purgeEndpointAction2() {45 PurgeEndpointAction purgeEndpointAction = new PurgeEndpointAction();46 purgeEndpointAction.setEndpoint(jmsEndpoint2());47 return purgeEndpointAction;48 }49 public PurgeEndpointAction purgeEndpointAction3() {50 PurgeEndpointAction purgeEndpointAction = new PurgeEndpointAction();51 purgeEndpointAction.setEndpoint(jmsSelectorEndpoint());52 Map<String, String> selectorMap = new HashMap<String, String>();53 selectorMap.put("selector1", "value1");54 selectorMap.put("selector2", "value2");55 purgeEndpointAction.setMessageSelectorMap(selectorMap);56 return purgeEndpointAction;57 }

Full Screen

Full Screen

setMessageSelectorMap

Using AI Code Generation

copy

Full Screen

1PurgeEndpointAction purgeEndpointAction = new PurgeEndpointAction();2purgeEndpointAction.setMessageSelectorMap("messageSelectorMap");3}4public void method5() {5PurgeEndpointAction purgeEndpointAction = new PurgeEndpointAction();6purgeEndpointAction.setMessageSelectorMap("messageSelectorMap");7}8public void method6() {9PurgeEndpointAction purgeEndpointAction = new PurgeEndpointAction();10purgeEndpointAction.setMessageSelectorMap("messageSelectorMap");11}12public void method7() {13PurgeEndpointAction purgeEndpointAction = new PurgeEndpointAction();14purgeEndpointAction.setMessageSelectorMap("messageSelectorMap");15}16public void method8() {17PurgeEndpointAction purgeEndpointAction = new PurgeEndpointAction();18purgeEndpointAction.setMessageSelectorMap("messageSelectorMap");19}20public void method9() {21PurgeEndpointAction purgeEndpointAction = new PurgeEndpointAction();22purgeEndpointAction.setMessageSelectorMap("messageSelectorMap");23}24public void method10() {25PurgeEndpointAction purgeEndpointAction = new PurgeEndpointAction();26purgeEndpointAction.setMessageSelectorMap("messageSelectorMap");27}28public void method11() {29PurgeEndpointAction purgeEndpointAction = new PurgeEndpointAction();30purgeEndpointAction.setMessageSelectorMap("messageSelectorMap");

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful