Repository: apache/gravitino
Pull request #7090: [#7087] fix(license): Fix the licenses issues
Author: login: roryqi
Labels: name: branch-0.9
description: Automatically cherry-pick commit to branch-0.9
Created: 2025-04-28T07:18:25Z | Merged: 2025-04-29T05:43:19Z

### What changes were proposed in this pull request?

Change the license header for the helm chart files.

Add the MIT licenses for web dependencies

Fix the license header for the `Either.java`

### Why are the changes needed?

Fix: #7087

### Does this PR introduce _any_ user-facing change?

No.

### How was this patch tested?

By reivew.


Diff:
diff --git a/LICENSE b/LICENSE
index 75fa0e50031..babb14f5a1f 100644
--- a/LICENSE
+++ b/LICENSE
@@ -309,6 +309,9 @@
    ./dev/ci/chart_schema.yaml
    ./dev/ci/lintconf.yaml
 
+   AWS SDK
+   ./core/src/main/java/org/apache/gravitino/listener/api/info/Either.java
+
    This product bundles a third-party component under the
    MIT License.
 
diff --git a/NOTICE b/NOTICE
index c8b1eda0d1e..7944edae737 100644
--- a/NOTICE
+++ b/NOTICE
@@ -33,3 +33,9 @@ Copyright 2019 and onwards The Apache Software Foundation.
 
 Apache Arrow
 Copyright 2016-2024 The Apache Software Foundation
+
+AWS SDK for Java 2.0
+Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+
+This product includes software developed by
+Amazon Technologies, Inc (http://www.amazon.com/).
\ No newline at end of file
diff --git a/core/src/main/java/org/apache/gravitino/listener/api/event/AlterModelVersionFailureEvent.java b/core/src/main/java/org/apache/gravitino/listener/api/event/AlterModelVersionFailureEvent.java
index db1d666f4df..8773551b0de 100644
--- a/core/src/main/java/org/apache/gravitino/listener/api/event/AlterModelVersionFailureEvent.java
+++ b/core/src/main/java/org/apache/gravitino/listener/api/event/AlterModelVersionFailureEvent.java
@@ -19,6 +19,7 @@
 
 package org.apache.gravitino.listener.api.event;
 
+import com.google.common.base.Supplier;
 import org.apache.gravitino.NameIdentifier;
 import org.apache.gravitino.annotation.DeveloperApi;
 import org.apache.gravitino.listener.api.info.Either;
@@ -60,7 +61,11 @@ public AlterModelVersionFailureEvent(
    *     otherwise throw IllegalStateException.
    */
   public String alias() {
-    return aliasOrVersion.getLeft();
+    return aliasOrVersion
+        .left()
+        .orElseThrow(
+            (Supplier<IllegalStateException>)
+                () -> new IllegalStateException("Alias can't be null value"));
   }
 
   /**
@@ -70,7 +75,11 @@ public String alias() {
    *     otherwise throw IllegalStateException.
    */
   public Integer version() {
-    return aliasOrVersion.getRight();
+    return aliasOrVersion
+        .right()
+        .orElseThrow(
+            (Supplier<IllegalStateException>)
+                () -> new IllegalStateException("Version can't be null value"));
   }
 
   /**
diff --git a/core/src/main/java/org/apache/gravitino/listener/api/event/AlterModelVersionPreEvent.java b/core/src/main/java/org/apache/gravitino/listener/api/event/AlterModelVersionPreEvent.java
index 3c2bbc1b658..d123069e664 100644
--- a/core/src/main/java/org/apache/gravitino/listener/api/event/AlterModelVersionPreEvent.java
+++ b/core/src/main/java/org/apache/gravitino/listener/api/event/AlterModelVersionPreEvent.java
@@ -19,6 +19,7 @@
 
 package org.apache.gravitino.listener.api.event;
 
+import com.google.common.base.Supplier;
 import org.apache.gravitino.NameIdentifier;
 import org.apache.gravitino.annotation.DeveloperApi;
 import org.apache.gravitino.listener.api.info.Either;
@@ -59,7 +60,11 @@ public AlterModelVersionPreEvent(
    *     otherwise throw an IllegalStateException exception.
    */
   public String alias() {
-    return aliasOrVersion.getLeft();
+    return aliasOrVersion
+        .left()
+        .orElseThrow(
+            (Supplier<IllegalStateException>)
+                () -> new IllegalStateException("Alias can't be null value"));
   }
 
   /**
@@ -69,7 +74,12 @@ public String alias() {
    *     otherwise throw an IllegalStateException exception.
    */
   public Integer version() {
-    return aliasOrVersion.getRight();
+
+    return aliasOrVersion
+        .right()
+        .orElseThrow(
+            (Supplier<IllegalStateException>)
+                () -> new IllegalStateException("Version can't be null value"));
   }
 
   /**
diff --git a/core/src/main/java/org/apache/gravitino/listener/api/info/Either.java b/core/src/main/java/org/apache/gravitino/listener/api/info/Either.java
index 60ebadaef30..b9b51e00b26 100644
--- a/core/src/main/java/org/apache/gravitino/listener/api/info/Either.java
+++ b/core/src/main/java/org/apache/gravitino/listener/api/info/Either.java
@@ -1,42 +1,91 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
  *
- *  http://www.apache.org/licenses/LICENSE-2.0
+ * Licensed under the Apache License, Version 2.0 (the "License").
+ * You may not use this file except in compliance with the License.
+ * A copy of the License is located at
  *
- * 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.
+ *  http://aws.amazon.com/apache2.0
+ *
+ * or in the "license" file accompanying this file. This file 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 org.apache.gravitino.listener.api.info;
 
+import com.google.common.base.Preconditions;
 import java.util.Optional;
-import org.glassfish.jersey.internal.guava.Preconditions;
+import java.util.function.Consumer;
+import java.util.function.Function;
 
 /**
- * Either represents a value of two possible types (a disjoint union).
+ * Represents a value that can be one of two types.
  *
  * @param <L> Left type
  * @param <R> Right type
  */
 public final class Either<L, R> {
+
   private final Optional<L> left;
   private final Optional<R> right;
 
+  private Either(Optional<L> l, Optional<R> r) {
+    left = l;
+    right = r;
+  }
+
   /**
-   * Create a new {@code Either} instance with a left value.
+   * Maps the Either to a type and returns the resolved value (which may be from the left or the
+   * right value).
+   *
+   * @param lFunc Function that maps the left value if present.
+   * @param rFunc Function that maps the right value if present.
+   * @param <T> Type that both the left and right should be mapped to.
+   * @return Mapped value from either lFunc or rFunc depending on which value is present.
+   */
+  public <T> T map(Function<? super L, ? extends T> lFunc, Function<? super R, ? extends T> rFunc) {
+    return left.<T>map(lFunc).orElseGet(() -> right.map(rFunc).get());
+  }
+
+  /**
+   * Map the left most value and return a new Either reflecting the new types.
+   *
+   * @param lFunc Function that maps the left value if present.
+   * @param <T> New type of left value.
+   * @return New Either bound to the new left type and the same right type.
+   */
+  public <T> Either<T, R> mapLeft(Function<? super L, ? extends T> lFunc) {
+    return new Either<>(left.map(lFunc), right);
+  }
+
+  /**
+   * Map the right most value and return a new Either reflecting the new types.
+   *
+   * @param rFunc Function that maps the right value if present.
+   * @param <T> New type of right value.
+   * @return New Either bound to the same left type and the new right type.
+   */
+  public <T> Either<L, T> mapRight(Function<? super R, ? extends T> rFunc) {
+    return new Either<>(left, right.map(rFunc));
+  }
+
+  /**
+   * Apply the consumers to the left or the right value depending on which is present.
+   *
+   * @param lFunc Consumer of left value, invoked if left value is present.
+   * @param rFunc Consumer of right value, invoked if right value is present.
+   */
+  public void apply(Consumer<? super L> lFunc, Consumer<? super R> rFunc) {
+    left.ifPresent(lFunc);
+    right.ifPresent(rFunc);
+  }
+
+  /**
+   * Create a new Either with the left type.
    *
    * @param value Left value
-   * @return Either with left value
    * @param <L> Left type
    * @param <R> Right type
    */
@@ -46,10 +95,9 @@ public static <L, R> Either<L, R> left(L value) {
   }
 
   /**
-   * Create a new {@code Either} instance with a right value.
+   * Create a new Either with the right type.
    *
    * @param value Right value
-   * @return Either with right value
    * @param <L> Left type
    * @param <R> Right type
    */
@@ -58,53 +106,60 @@ public static <L, R> Either<L, R> right(R value) {
     return new Either<>(Optional.empty(), Optional.of(value));
   }
 
-  /** Private constructor. */
-  private Either(Optional<L> l, Optional<R> r) {
-    left = l;
-    right = r;
+  /** @return the left value */
+  public Optional<L> left() {
+    return left;
   }
 
-  /**
-   * Returns true if this is a left value.
-   *
-   * @return True if this is a left value
-   */
-  public boolean isLeft() {
-    return left.isPresent();
+  /** @return the right value */
+  public Optional<R> right() {
+    return right;
   }
 
   /**
-   * Returns true if this is a right value.
+   * Create a new {@code Optional<Either>} from two possibly null values.
    *
-   * @return True if this is a right value
-   */
-  public boolean isRight() {
-    return right.isPresent();
-  }
-
-  /**
-   * Returns the left value if this is a left value, otherwise throws an exception.
+   * <p>If both values are null, {@link Optional#empty()} is returned. Only one of the left or right
+   * values is allowed to be non-null, otherwise an {@link IllegalArgumentException} is thrown.
    *
-   * @return Left value
-   * @throws IllegalStateException if this is a right value
+   * @param left The left value (possibly null)
+   * @param right The right value (possibly null)
+   * @param <L> Left type
+   * @param <R> Right type
+   * @return an Optional Either representing one of the two values or empty if both are null
    */
-  public L getLeft() {
-    if (isRight()) {
-      throw new IllegalStateException("Not a left value");
+  public static <L, R> Optional<Either<L, R>> fromNullable(L left, R right) {
+    if (left != null && right == null) {
+      return Optional.of(left(left));
+    }
+    if (left == null && right != null) {
+      return Optional.of(right(right));
     }
-    return left.get();
+    if (left == null && right == null) {
+      return Optional.empty();
+    }
+    throw new IllegalArgumentException(
+        String.format(
+            "Only one of either left or right should be non-null. " + "Got (left: %s, right: %s)",
+            left, right));
   }
 
-  /**
-   * Returns the right value if this is a right value, otherwise throws an exception.
-   *
-   * @return Right value
-   * @throws IllegalStateException if this is a left value
-   */
-  public R getRight() {
-    if (isLeft()) {
-      throw new IllegalStateException("Not a right value");
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof Either)) {
+      return false;
     }
-    return right.get();
+
+    Either<?, ?> either = (Either<?, ?>) o;
+
+    return left.equals(either.left) && right.equals(either.right);
+  }
+
+  @Override
+  public int hashCode() {
+    return 31 * left.hashCode() + right.hashCode();
   }
 }
diff --git a/core/src/test/java/org/apache/gravitino/listener/api/event/TestEither.java b/core/src/test/java/org/apache/gravitino/listener/api/event/TestEither.java
index de331b013dc..e919e41b0bb 100644
--- a/core/src/test/java/org/apache/gravitino/listener/api/event/TestEither.java
+++ b/core/src/test/java/org/apache/gravitino/listener/api/event/TestEither.java
@@ -29,36 +29,18 @@ public class TestEither {
   void testLeftValue() {
     Either<String, Integer> either = Either.left("alias");
 
-    Assertions.assertTrue(either.isLeft());
-    Assertions.assertFalse(either.isRight());
-    Assertions.assertEquals("alias", either.getLeft());
+    Assertions.assertTrue(either.left().isPresent());
+    Assertions.assertFalse(either.right().isPresent());
+    Assertions.assertEquals("alias", either.left().get());
   }
 
   @Test
   void testRightValue() {
     Either<String, Integer> either = Either.right(42);
 
-    Assertions.assertTrue(either.isRight());
-    Assertions.assertFalse(either.isLeft());
-    Assertions.assertEquals(42, either.getRight());
-  }
-
-  @Test
-  void testGetLeftThrowsOnRight() {
-    Either<String, Integer> either = Either.right(99);
-
-    IllegalStateException exception =
-        Assertions.assertThrows(IllegalStateException.class, either::getLeft);
-    Assertions.assertEquals("Not a left value", exception.getMessage());
-  }
-
-  @Test
-  void testGetRightThrowsOnLeft() {
-    Either<String, Integer> either = Either.left("lefty");
-
-    IllegalStateException exception =
-        Assertions.assertThrows(IllegalStateException.class, either::getRight);
-    Assertions.assertEquals("Not a right value", exception.getMessage());
+    Assertions.assertTrue(either.right().isPresent());
+    Assertions.assertFalse(either.left().isPresent());
+    Assertions.assertEquals(42, either.right().get());
   }
 
   @Test
@@ -67,10 +49,10 @@ void testToStringReadable() {
     Either<String, Integer> right = Either.right(3);
 
     // Optional checks — not essential but good to verify Optional usage
-    Assertions.assertTrue(left.isLeft());
-    Assertions.assertEquals("model_v1", left.getLeft());
+    Assertions.assertTrue(left.left().isPresent());
+    Assertions.assertEquals("model_v1", left.left().get());
 
-    Assertions.assertTrue(right.isRight());
-    Assertions.assertEquals(3, right.getRight());
+    Assertions.assertTrue(right.right().isPresent());
+    Assertions.assertEquals(3, right.right().get());
   }
 }
diff --git a/dev/ci/chart_schema.yaml b/dev/ci/chart_schema.yaml
index c209822a194..8550d427e1e 100644
--- a/dev/ci/chart_schema.yaml
+++ b/dev/ci/chart_schema.yaml
@@ -1,21 +1,16 @@
+# Copyright The Helm Authors
 #
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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
+# 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.
+#     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.
 name: str()
 home: str(required=False)
 version: str()
diff --git a/dev/ci/lintconf.yaml b/dev/ci/lintconf.yaml
index c5c904f3e24..3e878e2c54f 100644
--- a/dev/ci/lintconf.yaml
+++ b/dev/ci/lintconf.yaml
@@ -1,21 +1,16 @@
+# Copyright The Helm Authors
 #
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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
+# 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.
+#     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.
 ---
 rules:
   braces:
diff --git a/web/web/LICENSE.bin b/web/web/LICENSE.bin
index 7a1de16dadc..a29d5b1e49e 100644
--- a/web/web/LICENSE.bin
+++ b/web/web/LICENSE.bin
@@ -367,6 +367,8 @@
    buffer-crc32
    busboy
    call-bind
+   call-bind-apply-helpers
+   call-bound
    callsites
    camelcase-css
    cheerio
@@ -405,6 +407,7 @@
    dom-helpers
    dom-serializer
    duplexer
+   dunder-proto
    eastasianwidth
    end-of-stream
    enhanced-resolve
@@ -434,6 +437,7 @@
    eslint-plugin-react-hooks
    eslint-scope
    execa
+   fast-color
    fast-deep-equal
    fast-glob
    fast-json-stable-stringify
@@ -453,6 +457,7 @@
    function.prototype.name
    functions-have-names
    get-intrinsic
+   get-proto
    get-stream
    get-symbol-description
    get-tsconfig
@@ -532,6 +537,7 @@
    lodash.merge
    lodash-es
    loose-envify
+   math-intrinsics
    merge-stream
    micromatch
    minimist
diff --git a/web/web/licenses/call-bind-apply-helpers.txt b/web/web/licenses/call-bind-apply-helpers.txt
new file mode 100644
index 00000000000..f82f38963b0
--- /dev/null
+++ b/web/web/licenses/call-bind-apply-helpers.txt
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 Jordan Harband
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/web/web/licenses/call-bound.txt b/web/web/licenses/call-bound.txt
new file mode 100644
index 00000000000..f82f38963b0
--- /dev/null
+++ b/web/web/licenses/call-bound.txt
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 Jordan Harband
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/web/web/licenses/dunder-proto.txt b/web/web/licenses/dunder-proto.txt
new file mode 100644
index 00000000000..34995e79d15
--- /dev/null
+++ b/web/web/licenses/dunder-proto.txt
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 ECMAScript Shims
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/web/web/licenses/fast-color.txt b/web/web/licenses/fast-color.txt
new file mode 100644
index 00000000000..fbf368a7fba
--- /dev/null
+++ b/web/web/licenses/fast-color.txt
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+Copyright (c) 2015-present Alipay.com, https://www.alipay.com/
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/web/web/licenses/get-proto.txt b/web/web/licenses/get-proto.txt
new file mode 100644
index 00000000000..eeabd1c37ce
--- /dev/null
+++ b/web/web/licenses/get-proto.txt
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2025 Jordan Harband
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/web/web/licenses/math-intrinstics.txt b/web/web/licenses/math-intrinstics.txt
new file mode 100644
index 00000000000..34995e79d15
--- /dev/null
+++ b/web/web/licenses/math-intrinstics.txt
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 ECMAScript Shims
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.


Reviews:
user: login: roryqi
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-28T07:24:41Z
user: login: justinmclean
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-28T07:37:38Z
user: login: justinmclean
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-28T07:38:42Z
user: login: roryqi
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-28T07:44:36Z
user: login: roryqi
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-28T08:05:48Z
user: login: justinmclean
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-28T21:28:30Z
user: login: roryqi
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-29T02:06:07Z
user: login: justinmclean
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-29T02:14:08Z
user: login: justinmclean
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-29T02:14:36Z
user: login: roryqi
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-29T02:18:53Z
user: login: roryqi
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-29T02:19:02Z
user: login: justinmclean
body: LGTM
state: APPROVED
author_association: MEMBER
submitted_at: 2025-04-29T04:34:46Z

Review comments:
diff_hunk: @@ -1,20 +1,17 @@
 #
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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
+#  Copyright (c) 2025 Helm Organization.
 #
-#  http://www.apache.org/licenses/LICENSE-2.0
+#  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
 #
-# 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.
+#      http://www.apache.org/licenses/LICENSE-2.0
path: dev/ci/chart_schema.yaml
user: login: roryqi
body: Origin file doesn't have any header. So I add this header. Repo is maintained by Helm organization.
created_at: 2025-04-28T07:24:40Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1,20 +1,17 @@
 #
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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
+#  Copyright (c) 2025 Helm Organization.
 #
-#  http://www.apache.org/licenses/LICENSE-2.0
+#  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
 #
-# 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.
+#      http://www.apache.org/licenses/LICENSE-2.0
path: dev/ci/chart_schema.yaml
user: login: justinmclean
body: IMO No header should be added and the file kept as it as the LICENSE file will contain the needed information. There is no "Helm Organisation" that owns copyright, other files in the repo have the line "Copyright The Helm Authors".
created_at: 2025-04-28T07:37:38Z
author_association: MEMBER
diff_hunk: @@ -1,20 +1,16 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
  *
- *  http://www.apache.org/licenses/LICENSE-2.0
+ * Licensed under the Apache License, Version 2.0 (the "License").
+ * You may not use this file except in compliance with the License.
+ * A copy of the License is located at
  *
- * 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.
+ *  http://aws.amazon.com/apache2.0
+ *
+ * or in the "license" file accompanying this file. This file 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 org.apache.gravitino.listener.api.info;
path: core/src/main/java/org/apache/gravitino/listener/api/info/Either.java
user: login: justinmclean
body: The code needs to be replaced with the code in the AWS file, we can't use the Stack Overview version without permission and confirmation that it's the author's own work.
created_at: 2025-04-28T07:38:41Z
author_association: MEMBER
diff_hunk: @@ -1,20 +1,16 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
  *
- *  http://www.apache.org/licenses/LICENSE-2.0
+ * Licensed under the Apache License, Version 2.0 (the "License").
+ * You may not use this file except in compliance with the License.
+ * A copy of the License is located at
  *
- * 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.
+ *  http://aws.amazon.com/apache2.0
+ *
+ * or in the "license" file accompanying this file. This file 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 org.apache.gravitino.listener.api.info;
path: core/src/main/java/org/apache/gravitino/listener/api/info/Either.java
user: login: roryqi
body: OK, I will.
created_at: 2025-04-28T07:44:36Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1,20 +1,17 @@
 #
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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
+#  Copyright (c) 2025 Helm Organization.
 #
-#  http://www.apache.org/licenses/LICENSE-2.0
+#  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
 #
-# 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.
+#      http://www.apache.org/licenses/LICENSE-2.0
path: dev/ci/chart_schema.yaml
user: login: roryqi
body: I added header like other files.
```
# Copyright The Helm Authors
#
# 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.
```
Is it ok?
created_at: 2025-04-28T08:05:48Z
author_association: CONTRIBUTOR
diff_hunk: @@ -309,6 +309,9 @@
    ./dev/ci/chart_schema.yaml
    ./dev/ci/lintconf.yaml
 
+   AWS SDK
+   ./core/src/main/java/org/apache/gravitino/listener/api/info/Either.java
+
path: LICENSE
user: login: justinmclean
body: What about the NOTICE file? The AWS SDK has a NOTICE file https://github.com/aws/aws-sdk-java-v2/blob/master/NOTICE.txt, see https://infra.apache.org/licensing-howto.html#bundle-asf-product.
created_at: 2025-04-28T21:28:29Z
author_association: MEMBER
diff_hunk: @@ -309,6 +309,9 @@
    ./dev/ci/chart_schema.yaml
    ./dev/ci/lintconf.yaml
 
+   AWS SDK
+   ./core/src/main/java/org/apache/gravitino/listener/api/info/Either.java
+
path: LICENSE
user: login: roryqi
body: Thanks. I appended the NOTICE. Maybe you can take a look when you are free.
created_at: 2025-04-29T02:06:07Z
author_association: CONTRIBUTOR
diff_hunk: @@ -33,3 +33,29 @@ Copyright 2019 and onwards The Apache Software Foundation.
 
 Apache Arrow
 Copyright 2016-2024 The Apache Software Foundation
+
+AWS SDK for Java 2.0
+Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+
+This product includes software developed by
+Amazon Technologies, Inc (http://www.amazon.com/).
+
path: NOTICE
user: login: justinmclean
body: Only the above lines are needed
created_at: 2025-04-29T02:14:08Z
author_association: MEMBER
diff_hunk: @@ -33,3 +33,29 @@ Copyright 2019 and onwards The Apache Software Foundation.
 
 Apache Arrow
 Copyright 2016-2024 The Apache Software Foundation
+
+AWS SDK for Java 2.0
+Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+
+This product includes software developed by
+Amazon Technologies, Inc (http://www.amazon.com/).
+
+**********************
+THIRD PARTY COMPONENTS
+**********************
+This software includes third party software subject to the following copyrights:
+- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty.
+- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc.
+- Apache Commons Lang - https://github.com/apache/commons-lang
+- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams
+- Jackson-core - https://github.com/FasterXML/jackson-core
+- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary
+
+The licenses for these third party components are included in LICENSE.txt
+
+- For Apache Commons Lang see also this required NOTICE:
+  Apache Commons Lang
+  Copyright 2001-2020 The Apache Software Foundation
+
+  This product includes software developed at
+  The Apache Software Foundation (https://www.apache.org/).
path: NOTICE
user: login: justinmclean
body: None of these lines are needed
created_at: 2025-04-29T02:14:35Z
author_association: MEMBER
diff_hunk: @@ -33,3 +33,29 @@ Copyright 2019 and onwards The Apache Software Foundation.
 
 Apache Arrow
 Copyright 2016-2024 The Apache Software Foundation
+
+AWS SDK for Java 2.0
+Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+
+This product includes software developed by
+Amazon Technologies, Inc (http://www.amazon.com/).
+
path: NOTICE
user: login: roryqi
body: Modified by your suggestion. Thanks.
created_at: 2025-04-29T02:18:53Z
author_association: CONTRIBUTOR
diff_hunk: @@ -33,3 +33,29 @@ Copyright 2019 and onwards The Apache Software Foundation.
 
 Apache Arrow
 Copyright 2016-2024 The Apache Software Foundation
+
+AWS SDK for Java 2.0
+Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+
+This product includes software developed by
+Amazon Technologies, Inc (http://www.amazon.com/).
+
+**********************
+THIRD PARTY COMPONENTS
+**********************
+This software includes third party software subject to the following copyrights:
+- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty.
+- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc.
+- Apache Commons Lang - https://github.com/apache/commons-lang
+- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams
+- Jackson-core - https://github.com/FasterXML/jackson-core
+- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary
+
+The licenses for these third party components are included in LICENSE.txt
+
+- For Apache Commons Lang see also this required NOTICE:
+  Apache Commons Lang
+  Copyright 2001-2020 The Apache Software Foundation
+
+  This product includes software developed at
+  The Apache Software Foundation (https://www.apache.org/).
path: NOTICE
user: login: roryqi
body: Removed. Thanks.
created_at: 2025-04-29T02:19:02Z
author_association: CONTRIBUTOR

PR comments:
user: login: roryqi
created_at: 2025-04-28T07:20:29Z
body: I found these files have been included into our licenses directory. So I don't add them.
```
react-hook-form
scheduler
side-channel
side-channel-list
side-channel-map
side-channel-weakmap
```
Scheduler is from react repo.
author_association: CONTRIBUTOR
user: login: roryqi
created_at: 2025-04-28T12:05:38Z
body: @justinmclean Could you help me review this pr again when you have time?
author_association: CONTRIBUTOR
user: login: roryqi
created_at: 2025-04-29T05:42:55Z
body: Thanks @justinmclean 's review. I will merge this.
author_association: CONTRIBUTOR