All Downloads are FREE. Search and download functionalities are using the official Maven repository.

software.xdev.vaadin.maps.leaflet.registry.LComponentManagementRegistry Maven / Gradle / Ivy

The newest version!
/*
 * Copyright © 2019 XDEV Software (https://xdev.software)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package software.xdev.vaadin.maps.leaflet.registry;

import java.io.Serializable;

import com.vaadin.flow.component.page.PendingJavaScriptResult;

import software.xdev.vaadin.maps.leaflet.base.LComponent;
import software.xdev.vaadin.maps.leaflet.base.LComponentOptions;


/**
 * Used for tracking components (on the client).
 * 

* Links components from server (Java) and client (JS) so that they can be reused and/or manipulated after creation. * * @apiNote Manual invocation of these methods is normally not required.
* The only use cases when its required are
* a) when creating a (custom) LComponent
* b) when handling huge amounts of LComponents and needing to freeing up memory on the client side */ public interface LComponentManagementRegistry { // region Write Options String writeOptionsOptionalNextParameter(final LComponentOptions options); String writeOptions(final LComponentOptions options); String writeOptionsOrEmptyObject(final LComponentOptions options); // endregion // region Tracking /** * Creates the component on the client side and tracks it. * * @implNote The component is tracked on the server side inside a {@link java.util.WeakHashMap} which means that * it's can vanish (get garbage collected) to free up memory - when it's not used otherwise (e.g. in a Variable or * Lambda). This is a memory-optimization for cases where lots of components are added and removed. */ > C add( final C component, final String jsConstructorCallExpression, final Serializable... parameters); /** * Returns an expression to access the component on the client with JavaScript */ String clientComponentJsAccessor(final LComponent component); /** * Wrapper for {@link com.vaadin.flow.dom.Element#executeJs(String, Serializable...)}. *

* Usage is normally not recommended however there are some corner cases where it's required. */ PendingJavaScriptResult execJs(final String js, final Serializable... params); /** * Calls {@link #remove(LComponent, boolean)} with freeUpClientWhenNoMatch = true * * @see #remove(LComponent, boolean) */ default > void remove(final C component) { this.remove(component, true); } /** * Removes the tracked component from the client. *

* If the component can't be found {@link #freeUpClient()} is called when specified. */ > void remove(final C component, final boolean freeUpClientWhenNoMatch); /** * Tries to free up unused components on the client. * * @implNote Freeing up is only executed when the server detects that a component on server side vanished (got * garbage collected). If this is true a full resync of all tracked elements with the client is triggered. */ void freeUpClient(); /** * Clears all tracked elements. */ void clearAll(); // endregion }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy